2014-12-13 8 views
1

Я занимаюсь разработкой приложения, и все работает нормально. Но когда я попытался нажать его на PaaS (используя Jelastic), модуль аутентификации, который я использую (t2v/play2-auth), похоже, больше не работает. Я действительно не понимаю, почему и хотел бы получить некоторые объяснения. Это мой первый опыт использования PaaS, и я думаю, что я все еще не получаю.Войти перенаправить на страницу входа с play2 auth

Для получения дополнительной информации: при попытке входа в систему логин, похоже, работает, и я перенаправлен в/home, но по какой-то причине меня автоматически перенаправляют на страницу входа. Я подозреваю, что пользователь не аутентифицирован. Почему это?

POST http://app/login [HTTP/1.1 303 See Other 3624ms] 
GET http://app/home [HTTP/1.1 303 See Other 53ms] 
GET http://app/login [HTTP/1.1 200 OK 107ms] 

Благодаря любой информации или идеям заблаговременно.

EDIT: Вот моя AuthConfig черта:

type Id = Long 
type User = AccessUser 
type Authority = Int 
val idTag: ClassTag[Id] = classTag[Id] 
val sessionTimeoutInSeconds: Int = 3600 

def resolveUser(id: Id)(implicit ctx: ExecutionContext): Future[Option[User]] = Future(AccessProvider.find(id)) 

def goHome: Future[Result] = Future(Redirect(controllers.users.routes.UserSpaceController.home(0))) 

def loginSucceeded(request: RequestHeader)(implicit ctx: ExecutionContext): Future[Result] = { 
val uri = request.session.get("access_uri").getOrElse(controllers.users.routes.UserSpaceController.home(0).url.toString) 
Future.successful(Redirect(uri).withSession(request.session - "access_uri")) 
} 

def logoutSucceeded(request: RequestHeader)(implicit ctx: ExecutionContext): Future[Result] = 
Future.successful(Redirect(controllers.routes.PublicController.index)) 

def authenticationFailed(request: RequestHeader)(implicit ctx: ExecutionContext): Future[Result] = 
Future.successful(Redirect(controllers.users.routes.SecurityController.login).withSession("access_uri" -> request.uri)) 

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

def authorize(user: User, authority: Authority)(implicit ctx: ExecutionContext): Future[Boolean] = Future.successful { 
(user.permission, authority) match { 
    some cases 
} 
} 
override lazy val cookieSecureOption: Boolean = play.api.Play.isProd(play.api.Play.current) 
+0

Звучит как проблема с кешированием. Вы используете ehcache? Вы используете несколько экземпляров? Как выглядит ваш признак «AuthConfig»? –

+0

@ m-z Спасибо за ответ. Нет. Я не использую ehcache (или, по крайней мере, я не настроил ничего особенного для кэширования). Я отредактировал свое оригинальное сообщение с AuthConf. Спасибо за помощь –

+3

Две вещи. Во-первых, если вы не настроили что-либо для кеша, то вы, вероятно, используете реализацию ehcache по умолчанию (это приведет к сбоям в работе в распределенной среде). Другая вещь, которую я заметил, - это то, что у вас есть значение 'cookieSecureOption' для true, но ваши URL-адреса используют только http. Если вы не используете https и 'cookieSecureOption = true', cookie будет отброшен - это, вероятно, ваша проблема. –

ответ

1

Благодаря @ m-z я смог решить свою проблему. Решение действительно было cookieSecureOption=true.

Действительно, кэш может быть проблемой позже. Но пока это работает. Спасибо за разъяснения.

0

Кажется мне корневая причина проблемы в том, что приложение не настроено правильно. Возможно, вам стоит попытаться переустановить приложение, используя следующую статью: http://blog.jelastic.com/2013/07/02/play-2-web-application-deployment-tutorial/ Если это не поможет, вы должны связаться со службой поддержки вашего хостинга.

 Смежные вопросы

  • Нет связанных вопросов^_^