1 回答

TA貢獻1875條經驗 獲得超3個贊
問題是您將用戶存儲在一個上下文中,但隨后您嘗試從另一個上下文中檢索用戶。value*gin.Context和 value*gin.Context.Request.Context是兩個獨立的上下文值。
您正在使用請求的上下文來存儲用戶:
c.Request.WithContext(context.WithValue(c.Request.Context(), key, value))
然后您使用 gin 上下文來檢索用戶:
func getCurrentUser(ctx context.Context) *dbm.User {
cu := ctx.Value(utils.ProjectContextKeys.UserCtxKey).(*dbm.User)
// ...
func Get(orm *orm.ORM) gin.HandlerFunc {
return func(ctx *gin.Context) {
cu := getCurrentUser(ctx) // here you're passing *gin.Context to the function.
// ...
因此,要解決這個問題,將傳遞給getCurrentUser調用的值更改為:
func Get(orm *orm.ORM) gin.HandlerFunc {
return func(ctx *gin.Context) {
cu := getCurrentUser(ctx.Request.Context())
if ok, err := cu.HasPermission(consts.Permissions.Create, consts.EntityNames.Users); !ok || err != nil {
ctx.String(http.StatusUnauthorized, "BAD")
}
}
}
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報