2015-04-10 4 views
2

Итак, я работаю над webapp в Scala с Play 2.3, используя IntelliJ 14.1.1.Scala Play значение сеанса не сохраняется

Проблема заключается в сохранении значений в сеансе. Сейчас у меня это:

def authCredentials = Action { implicit request => 
    loginForm.bindFromRequest.fold(
     formWithErrors => BadRequest(views.html.login(formWithErrors.withError("badlogin","Username or password is incorrect."))), 
     goodForm => Redirect(routes.AccountController.display).withSession(request.session + ("username" -> goodForm._1)) 
    ) 
} 

, а затем в моем AccountController:

def display = Action { implicit request => 
    request.session.get("username").map { username => 
     Ok(views.html.account(User.getUser(username))).withSession(request.session + ("username" -> username)) 
    }.getOrElse(Redirect(routes.LoginController.login)).withNewSession 
    } 

Теперь в приведенной выше функции, которая находит имя пользователя и отображения страницы учетной записи только один раз. Проблема в том, что когда я хочу перейти к странице со страницы учетной записи, например, на странице смены пароля или даже обновить страницу учетной записи, она перенаправит обратно на логин с новым сеансом.

Что я делаю неправильно, и есть лучший способ проверить, прошел ли сеанс для доступа к странице вместо повторного кода для каждой функции отображения.

ответ

0

Казалось бы, простая задача, круглые скобки, попробуйте:

def display = Action { implicit request => 
    request.session.get("username").map { username => 
    Ok(views.html.account(User.getUser(username))).withSession(request.session + ("username" -> username)) 
    }.getOrElse(Redirect(routes.LoginController.login).withNewSession) 
} 

Вы были фактически перезапуске сессии в любом случае в контроллере, теперь withNewSession вызов внутри getOrElse, которые посылают только новую сессию в случае отсутствия имя пользователя найдено в текущем.

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