1

play2-auth と playframework 2.2.0 でログインを実装しようとしています。非同期を使用して最後のブランチからロジックを実装しました。ログインに成功した後、Home アクションはログインしたユーザーを認識せず、再度ログインにリダイレクトします。コード:

AuthConfig トレイト:

trait AuthConfigImpl extends AuthConfig {

 type Id = String

  type User = Account
  type Authority = models.poso.Permission

  val idTag: ClassTag[Id] = classTag[Id]

  val sessionTimeoutInSeconds: Int = 3600
  def resolveUser(id: Id)(implicit ctx: ExecutionContext): Future[Option[User]] = Future.successful(Cache.getAccountJson(id))

  def loginSucceeded(request: RequestHeader)(implicit ctx: ExecutionContext): Future[SimpleResult] =
    Future.successful(Redirect(routes.Home.test))

  def logoutSucceeded(request: RequestHeader)(implicit ctx: ExecutionContext): Future[SimpleResult] =
    Future.successful(Redirect(routes.Login2.login))

  def authenticationFailed(request: RequestHeader)(implicit ctx: ExecutionContext): Future[SimpleResult] =
    Future.successful(Redirect(routes.Login2.login))

  def authorizationFailed(request: RequestHeader)(implicit ctx: ExecutionContext): Future[SimpleResult] =
        Future.successful(Forbidden("no permission"))

 def authorize(user: User, authority: Authority, request: RequestHeader)(implicit ctx: ExecutionContext): Future[Boolean] = Future.successful {
    val perm = user.user.permissao.tree.get(request.path).getOrElse(false)
    perm match {
      case true => true
      case _ => false
    }
  }
}

ホーム アクション:

class Home @Inject() (implicit sessionService: SessionService) extends Controller with AuthElement with AuthConfigImpl {

  def test() = StackAction(AuthorityKey -> NormalUser) { implicit request =>
    {
      val u = loggedIn
      //usurio tem permissao
      Ok(views.html.home(u.user.email.toString))
      //      Ok(views.html.home(user.get.email.toString))
    }
  }

}

ログインクラス:

class Login2 @Inject() (implicit sessionService: SessionService, loginService: LoginService, userService: UserService) extends Controller with LoginLogout with AuthConfigImpl with Logging {
 def authenticate = Action.async { implicit request =>
    {
      val form = userForm.bindFromRequest
      try {
        form.fold(
          errors => {
            Future.successful(BadRequest(views.html.login("", userForm)))
          },
          other1Form => {
            val login = loginService.loginVerify(other1Form.email, other1Form.password)
            val uuidGenerate = java.util.UUID.randomUUID.toString
            val account = userService.getDataFromUser(other1Form.email)
            Cache.addEntry(EhCacheRegion.Cerberus.toString() + SessionProductName.Account.toString(), uuidGenerate, models.poso.Session.toJson(account))
            gotoLoginSucceeded(uuidGenerate)
          })
      } catch {
        case login: LoginException => {
          val formError = form.withGlobalError(login.msg)
          Future.successful(BadRequest(views.html.login("", formError)))
        }
        case ex: Exception => {
          logger.error(ex.getMessage())
          Future.successful(BadRequest(views.html.login("", form.withGlobalError("system error"))))
        }
        case _: Any => {
          logger.error("error")
          Future.successful(BadRequest("err"))
        }
      }
    }
  }
}

これはブラウザでの結果です: ここに画像の説明を入力

4

1 に答える 1

1

安全な Cookie が設定されていないことを確認し、安全でない環境でテストしてみてください。lazy val cookieSecureOption については、AuthConfig を確認してください

于 2014-03-18T10:42:21.163 に答える