Отображение информации о вошедшем в систему пользователе в заголовке моего веб-приложения каждый раз

Я работаю над игрой 2.1 с безопасной социальной интеграцией. На данный момент мне удалось интегрировать securesocial с mongod db с помощью SALAT. Теперь я могу войти/выйти. Но теперь я хочу, чтобы если пользователь вошел в систему, мне нужно показать информацию о пользователе, такую ​​​​как аватар и т. Д., В заголовке моего веб-приложения, и я не уверен, как получить информацию о пользователе в scala.html без передачи в качестве параметров из Контроллер. Я не могу делать это каждый раз.

Есть ли у нас что-то похожее на Spring Security, который захватывает пользователя из сеанса и использует EL или Spring taglib для отображения информации о пользователе???


person Giri    schedule 21.08.2013    source источник


Ответы (3)


Печально, что это сообщество настолько неактивно или не хочет отвечать на этот вопрос. Я до сих пор нахожу сообщества spring и java, отвечающие на самые основные вопросы, даже спустя несколько лет. Итак, вот что я сделал. Любые улучшения или предложения приветствуются.

Написал метод в своем контроллере, который возвращал бы пользователя как неявный метод.

  implicit def user(implicit request: RequestHeader):Option[Identity] = {
    SecureSocial.currentUser
  }

Передайте этого пользователя моему шаблону и сделайте его неявным. Интересно, почему он не может напрямую использовать его с контроллера. Я должен явно передать это, что очень странно.

  @(implicit user:Option[securesocial.core.Identity])

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

@(title: String, nav: String = "")(content: Html)(implicit user:Option[securesocial.core.Identity]=None)

Затем некоторый код, связанный с просмотром

@if(user.isDefined){
      <li>          
         <a href="@securesocial.controllers.routes.LoginPage.logout()"/>Logout</li>
         }else{
      <li>
        <a href="@securesocial.core.providers.utils.RoutesHelper.login()">Login</a></li>
 }
person Giri    schedule 02.09.2013
comment
Вы также можете поместить пользовательский метод внутрь трейта, чтобы повторно использовать его в других контроллерах. Вот пример: http://git.io/OFlBOw - person Marashi; 01.10.2013

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

@defining(Auth.getCurrentUserName()) {user =>
    <div>Hello, @user</div>
}

Auth является контроллером, getCurrentUserName() просто получает некоторые данные из сеанса.

public static String getCurrentUserName() {
    return session().get("username");
}
person kapex    schedule 22.08.2013
comment
Хорошо, это очевидно в java, но тот же подход должен работать и в scala. - person kapex; 22.08.2013

Чтобы сделать это проще, не указывая неявного пользователя, просто вызовите SecureSocial.currentUser() непосредственно в вашем шаблоне scala.

Вам нужно импортировать его, а затем вы можете проверить, определен ли пользователь:

@import securesocial.core.SecureSocial

@if(SecureSocial.currentUser.isDefined) {
    ...
}
person Andriusa    schedule 06.04.2014
comment
Не работает: Ошибка компиляции: Cannot find any HTTP Request Header here в строке @SecureSocial.currentUser.map { u => - person Raman; 16.04.2014