Платформа Play: сеансы, параметры входа / выхода

Надеюсь, ты сможешь помочь, но серьезно расстраиваюсь из-за этого. Я использую Play 2! и Java. Все, что я хочу сделать, это иметь определенные ссылки в моей основной навигации, которые будут присутствовать только при входе в систему.

Например, «Вход» при выходе из системы и «Выход» при входе в систему и т. Д.

Кажется, это освещалось несколько раз, но у меня ничего не получалось.

Мой шаблон:

<ul class="nav navbar-nav navbar-right">
    <li><a href="@routes.UserController.registration">Register</a></li>
    <li><a href="@routes.Application.logout()">Logout</a></li>
</ul>

Пример моего файла cookie: "e5e9fd6231e0f0296d5f41a2edd05bcc6014a173-email = jeff% 40example.com

Что я хочу делать:

<ul class="nav navbar-nav navbar-right">
    @if(***user is logged in***){
      <li><a href="@routes.Application.logout()">Logout</a></li>
    } else{
      <li><a href="@routes.UserController.registration">Register</a></li>
      <li><a href="@routes.Application.logout()">Login</a></li>
    }
</ul>

Надеюсь, кто-нибудь сможет дать совет.

Заранее спасибо...

PS. просмотрели ... Переключить вход / выход в зависимости от того, вошел ли пользователь в систему https://groups.google.com/forum/#!topic/play-framework/_6HWFJUzWPE

и многие другие варианты, но кажутся бесполезными :-(


person user1974297    schedule 26.03.2014    source источник


Ответы (1)


Попробуйте использовать свой сеанс следующим образом: когда пользователь входит в систему, добавьте его адрес электронной почты в текущий сеанс:

Redirect(...).withSession("email"-> "[email protected]")

Вы также можете установить файл cookie следующим образом:

Redirect(...).withCookies(
   Cookie("email","[email protected]",Some(duration),"/",Some(".example.com"),false,false)
)

Затем, если вы хотите обслуживать страницу, на которой у вас разное поведение в зависимости от того, вошел ли пользователь в систему или нет, сделайте это в своем контроллере:

val emailOpt = request.cookies.get("email")

если вы используете файлы cookie, или:

val emailOpt = request.session.get("email")

если вы используете только сеанс.

emailOpt - это Option электронного письма String. Передайте его в свой шаблон, а затем используйте в своем шаблоне следующим образом:

<ul class="nav navbar-nav navbar-right">
    @if(emailOpt != None){
      <li><a href="@routes.Application.logout()">Logout</a></li>
    } else{
      <li><a href="@routes.UserController.registration">Register</a></li>
      <li><a href="@routes.Application.logout()">Login</a></li>
    }
</ul>
person Peter    schedule 26.03.2014
comment
Это похоже на реализацию Scala? Я использую Java, и я не управляю и не изменяю какие-либо файлы cookie. Я только что использовал следующий учебник playframework.com/documentation/2.2.x/JavaGuide4. Все работает нормально ... разве нет простого фрагмента вроде @if (session.connected ()) {бла-бла-бла} - person user1974297; 26.03.2014
comment
Я не знал, что вы используете Java, поскольку в вашем вопросе нет тега Java, поэтому я выбрал Scala. Внедрение Java должно быть примерно таким же, за исключением None, в котором вы бы использовали null. Я рекомендую вам проверить документ о файлах cookie и сеансах в Java, решение, которое я дал, все еще действует с некоторыми изменениями, которые, как мне кажется,. - person Peter; 26.03.2014