2016-10-15 10 views
0

goaでWebサーバーを作成しています(評判が足りない、スタックオーバーフロータグを作成できません)。goaでユーザーが認識できるアクション

コントローラメソッド内でユーザーコンテキストを取得する方法が見つかりません。 基本認証でサポートされているJWT authを使用します。 私はJWTミドルウェア経由で保護されたJWTセキュアアクションを持っており、パスワードなどをチェックしています。

私が望むのは、JWTトークンからセキュアメソッドにユーザ名を取得することです。何か方法はありますか?

ゴアデザインファイルの断片:

var JWT = JWTSecurity("jwt", func() { 
    Header("Authorization") 
    Scope("api:access", "API access") // Define "api:access" scope 
}) 

Security(JWT, func() { 
    // Use JWT to auth requests to this endpoint 
    Scope("api:access") // Enforce presence of "api" scope in JWT claims. 
}) 

Action("secure", func() { 
    Description("This action is secured with the jwt scheme") 
    Routing(GET("/jwt")) 
    Response(OK) 
}) 

このDSLは、このメソッドに生成されます:

func (c *JWTSessionsController) Secure(ctx *app.SecureJWTContext) error { 
    return ctx.OK(&app.Success{false}) 
} 

発生アクションが(ミドルウェアが搭載され、すべての検証が通過)を確保し、うまく機能しています。しかし、私はアクションでユーザー名を取得したい。どういうわけか可能ですか?

私はこの方法でそれを取得したいと思います:私は二回JWTを解析する必要があります

ctx.User.Username 

今のところ。 :(

私は、base64トークンの主張を解析するヘルパーを作った。

答えて

0

jwtパッケージが要求コンテキストからJWTトークンコンテンツを抽出ContextJWT機能を公開します。これは、トークンに格納されているクレームを取得することが可能になります:。

token := jwt.ContextJWT(ctx) 
claims := token.Claims.(jwtgo.MapClaims) 
subject := claims["sub"] // "sub" claim contains security principal 
// ... use subject to authenticate 

ことjwtgoがdgrijalva/JWT-行くパッケージです

+0

それは非常にいいですが、それはまだ生成されたコントローラからJWT-行く枠組みを隔離するために、いくつかのラッピングが必要な場合にはそれが見えます。それは仕事をする必要がありますように – vvwccgz4lh

関連する問題