3

現在、私は自分BaseControllerと各コントローラーメソッドに、ユーザーを認証する必要があるメソッドを持っています。常にこのコードを呼び出す必要があります。

user, err := c.getUser()
if err != nil {
        return c.Redirect(UserController.Login)
}

かどうかを確認するだけです

revel.InterceptMethod((*UserController).CheckUser, revel.BEFORE)

(init.go で) が有効なユーザーを に追加しました.RenderArgs["user"]

とにかく、このリダイレクトをログインページに含めることができますか. 認証はフィルター/インターセプトメソッドにチェックインするので、上記のコードを10回繰り返す必要はありませんか? (このコードはレベル v0.9~0.10 あたりで開発しました)

私が思いついた解決策の 1 つは、新しい csrf モジュールに似たモジュール/アプリを作成することです。

編集 4.11.2015: この質問は少し前に投稿されました。revel はかなりの開発が行われているため、 Revel の公式ドキュメントを確認してください。

4

1 に答える 1

2

認証が適切に行われていない限り、コントローラーへのリクエストを許可しないでください。そのためにFilterを実装する必要があります。みたいな意味です

init.go:

revel.Filters = []revel.Filter{
    SessionFilter, // Preferably a safe implementation that isn't plaintext cookies etc
    mypackage.Authenticator
}

mypackage.go:

package mypackage

func Authenticator(c *revel.Controller, fc []revel.Filter) {
 // If authentication found (from session), pass to next Filter in stack
 // If not, redirect to your authentication UI, and pass
 // Or handle other parts of authentication requests...
 // If authentication succeeded, save it to session

 // Otherwise just drop the request (probably log?)
}

詳細は、設定している認証の種類に完全に依存します。参照用のSSO 実装の1 つを次に示します。

于 2014-11-28T18:03:33.557 に答える