flat-accountant-3839
11/18/2022, 11:41 AMsome-addition-86177
11/18/2022, 11:53 AMflat-accountant-3839
11/18/2022, 12:00 PMflat-accountant-3839
11/18/2022, 12:02 PMsteep-lamp-91158
some-addition-86177
11/18/2022, 5:24 PMsome-addition-86177
11/18/2022, 5:28 PMimport kratos "<http://github.com/ory/kratos-client-go|github.com/ory/kratos-client-go>"
func NewSessionMiddleware(client *kratos.APIClient) gin.HandlerFunc {
return func(c *gin.Context) {
...
authToken := c.Request.Header.Get("Authorization")
cookie, err := c.Request.Cookie(<whatever cookie name you configured>)
if err != nil && authToken == "" {
c.Redirect(http.StatusMovedPermanently, "/login")
c.Abort()
return
}
sessionRequest := client.V0alpha2Api.ToSession(c.Request.Context())
if cookie != nil {
sessionRequest = sessionRequest.Cookie(cookie.String())
} else {
authToken = strings.Replace(authToken, "Bearer ", "", 1)
sessionRequest = sessionRequest.XSessionToken(authToken)
}
session, _, err := sessionRequest.Execute()
if err != nil {
c.Redirect(http.StatusMovedPermanently, "/login")
c.Abort()
return
}
if !*session.Active {
c.Redirect(http.StatusMovedPermanently, "/login")
c.Abort()
return
}
userData, ok := session.Identity.Traits.(map[string]interface{})
if !ok {
log.Printf("Cannot convert kratos session Identity traits to a map - %v\n", session.Identity.Traits)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "Internal server error while processing session information."})
return
}
....
bulky-architect-22083
11/20/2022, 7:03 AMflat-accountant-3839
11/21/2022, 5:04 AM