Add readme
This commit is contained in:
parent
ed5dff832b
commit
6d2974241c
1 changed files with 63 additions and 0 deletions
63
README.md
Normal file
63
README.md
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
# sf-auth-gin-middleware
|
||||
|
||||
This project provides a small Go library that integrates the Snazzyfellas sf-auth redirect flow with the Gin web framework. It exposes a middleware that enforces authenticated sessions and a prebuilt callback handler that validates sf-auth keys, stores user data in the session, and redirects back to your application.
|
||||
|
||||
## Usage
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-contrib/sessions"
|
||||
"github.com/gin-contrib/sessions/cookie"
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"sf-auth-gin-middleware/sfauthgin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
router := gin.Default()
|
||||
store := cookie.NewStore([]byte("super-secret"))
|
||||
router.Use(sessions.Sessions("sf_auth", store))
|
||||
|
||||
authMiddleware := sfauthgin.NewMiddleware(func(c *gin.Context) string {
|
||||
return "http://localhost:3000/auth_callback"
|
||||
})
|
||||
|
||||
router.GET("/", func(c *gin.Context) {
|
||||
c.String(http.StatusOK, "Welcome to the demo")
|
||||
})
|
||||
|
||||
router.GET("/auth_callback", sfauthgin.CreateAuthCallbackHandler("/user_info"))
|
||||
|
||||
router.GET("/user_info", authMiddleware, func(c *gin.Context) {
|
||||
session := sessions.Default(c)
|
||||
userID := session.Get("sf_user_id")
|
||||
username := session.Get("sf_username")
|
||||
c.String(http.StatusOK, "User ID: %v\nUsername: %v", userID, username)
|
||||
})
|
||||
|
||||
router.GET("/settings", authMiddleware, func(c *gin.Context) {
|
||||
session := sessions.Default(c)
|
||||
userID := session.Get("sf_user_id")
|
||||
c.String(http.StatusOK, "Settings for user: %v", userID)
|
||||
})
|
||||
|
||||
_ = router.Run(":3000")
|
||||
}
|
||||
```
|
||||
|
||||
## User identity note
|
||||
|
||||
Usernames can change, so avoid using `sf_username` as a stable identifier. Store any user-related data under the `sf_user_id` value instead.
|
||||
|
||||
If you have many protected routes, you can also attach the middleware to a group, for example:
|
||||
|
||||
```go
|
||||
protected := router.Group("/")
|
||||
protected.Use(authMiddleware)
|
||||
protected.GET("/user_info", userInfoHandler)
|
||||
protected.GET("/settings", settingsHandler)
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue