2012-02-10 2 views
4

Я пытаюсь преобразовать идентификатор пользователя из класса User и сохранить его в Play! переменная сеанса. Однако, когда я пытаюсь распечатать эту переменную сеанса, она возвращает пустую строку. Это простая проверка подлинности.Преобразование Scala long в строковые отпечатки

Во время аутентификации:

session += "userid" -> user.id.toString 

Печать сессии переменная Play! Скала вид:

@ctx("userid") 

Вся аутентификация Защита:

def authenticate(login:LoginAttempt) = { 
      println("in authenticate") 
     User.authenticate(login.username, login.password) match { 
      case Some(user:User) => { 
       session += "username" -> user.emailAddress 
       session += "userid" -> user.id.toString 
       session += "name" -> user.name 
      session += "accounts" -> user.accounts.toString 
       Redirect(session("path").getOrElse("/")) 
      } 
      case _ => { 
       flash += "error" -> "Wrong username or password." 
       Action(Authentication.login) 
      } 
     } 
    } 

И класс User:

case class User(
    val id: Long, 

раствор? Что пропало или происходит неправильно здесь, что предотвращает хранение user.id в сеансе? Спасибо

+0

Даже если я уверен, что вы проверили все перед публикацией здесь, это, по-видимому, ошибка инициализации: вы инициализировали сеанс? id вы инициализируете пользователя перед его использованием? В противном случае я не вижу, что изменилось бы с помощью 'Long' vs a String' –

+0

Исправлены обе инициализированы, и я могу проверить, что у bc у меня есть доступ к строкам, таким как имя пользователя, которое я сохранил в сеансе. Мое единственное другое предположение - я не хватает «функции» игры! сессионные вары. – crockpotveggies

+0

На самом деле у меня в настоящее время проблема с тем же заказом с liftweb, однако она работает с 'SessionVar', но не с' RequestVar'. –

ответ

3

После того, как вы спросили и прочитали больше, это было вызвано «особенностью» игры! 1.2.4. К счастью, мы можем ожидать большего с v2.

Для нашего конкретного приложения есть 3-й часто забываемый шаг, когда дело доходит до переменных сеанса. Для каждого из них вам нужно будет renderArgs. Поэтому комментарий от @ChrisJamesC был в основном прав: в инициализации был пропущен шаг.

Вот что происходит в нашем контроллере Secure.scala:

(session("userid"), session("username"), session("name"), session("accounts")) match { 
      case (Some(userid), Some(username), Some(name), Some(accounts)) => { 
       renderArgs += "userid" -> userid 
       renderArgs += "username" -> username 
       renderArgs += "name" -> name 
         renderArgs += "accounts" -> accounts 
       Continue 
      } 
      case _ => { 
       session += "path" -> Request.current().path 
       Action(Authentication.login) 
      } 
     } 

В моем случае, я не понимаю, что мне нужно для renderArgs каждый переменной Я хочу, чтобы хранить и доступа в сессия. Но есть уловка: вам все равно нужно хранить каждый var как String.

Затем в каждой игре! view Я могу получить доступ к var так: @ctx("userid")

Надеюсь, это поможет будущим людям, которые используют Play!

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