6

Playで!フレームワーク2.0、セキュリティ特性を使用:

ユーザーに認証されていないサイトのいくつかの部分を参照させたが、認証が必要な特定のアクションで、認証前にすべてのユーザーに同じURLではなく元のURLにリダイレクトするにはどうすればよいですか?

これは、Playのこの質問と同様の要件です。1.x Playframeworkのセキュアモジュールは、ログイン後に元のURLにリダイレクトされません

ただし、元のURLのフラッシュパラメータは、私が知る限り、2.0では使用できません。

基本的に、私が探している変更は、認証メソッドハンドラーにあります

def authenticate = Action { implicit request =>
    loginForm.bindFromRequest.fold(
      formWithErrors => BadRequest(html.login(formWithErrors)),
      user => Redirect(routes.Application.index).withSession(Security.username -> user._1)
    )
  }

ある種のRedirect(originalRequestUrl)が便利な場合。

クリーンなソリューションのアイデアはありますか?

4

1 に答える 1

11

Refererヘッダーを使用するか、認証アクションで戻り URLを明示的に運ぶことができます。

Refererヘッダーの使用

def authenticate = Action { implicit request =>
  loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors)),
    user => {
      val returnUrl = request.headers.get(REFERER).getOrElse(routes.Application.index.url)
      Redirect(returnUrl).withSession(Security.username -> user._1)
    }
}

リターン URL を明示的に運ぶ

def authenticate(returnUrl: String) = Action { implicit request =>
  loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors, returnUrl)),
    user => Redirect(returnUrl).withSession(Security.username -> user._1)
  )
}

HTTP ヘッダーを使用することRefererで、ブラウザーがこのヘッダーを埋めない場合にも対処する必要があります。authenticateアクションのパラメーターとして戻り URL を明示的に保持することで、認証を使用してコードを処理するボイラープレートが増える可能性があります…</p >

于 2012-04-19T09:10:02.480 に答える