2013-08-21 9 views
4

我正在玩安全社交集成2.1。截至目前,我能够使用SALAT将securesocial和mongod db整合在一起。现在我可以登录/注销。但现在我想要的是,如果用户已经登录,那么我需要在我的Web应用程序的头部显示像头像等用户信息,我不知道如何从scala.html中获取用户信息而不传递参数控制器。我不能每次都这样做。显示登录在我的web应用程序的标题中的用户信息每次

我们是否有类似于春季安全的类似于从会话中抓取用户并使用EL或春天taglib显示用户信息的东西?

回答

3

伤心的是,这个社区是如此无效或不想回答这个问题。即使经过几年,我仍然可以找到春天和Java社区回答最基本的问题。所以这里就是我所做的。任何改进或建议都非常受欢迎。

在我的控制器中写了一个方法,它将用户作为隐式方法返回。

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

将此用户传递给我的模板并使其隐含。想知道为什么它不能直接从控制器使用它。我必须明确地通过它,这是非常奇怪的。

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

由于用户信息必须是在它的所有页面在主模板或主模板调用包含呈现用户info.In我的主模板=>

@(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> 
} 
+1

您也可以将用户方法放入特征中以在其他控制器中重用它。下面是一个示例:[http://git.io/OFlBOw](http://git.io/OFlBOw) – Marashi

2

可以调用控制器的方法在模板中得到的东西,而不把它当作一个参数:

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

Auth是控制器,getCurrentUserName()刚刚从会议得到了一些数据。

public static String getCurrentUserName() { 
    return session().get("username"); 
} 
+0

确定这显然是在Java中,但同样的方法应该在斯卡拉工作了。 – Kapep

2

为了使它不提供隐含的用户更简单,只需调用SecureSocial.currentUser()直接在斯卡拉的模板。

您需要导入它,然后你可以检查用户是否被定义为:

@import securesocial.core.SecureSocial 

@if(SecureSocial.currentUser.isDefined) { 
    ... 
} 
+0

不起作用:编译错误:'在这行''找不到任何HTTP请求头' SecureSocial.currentUser.map {u =>' – Raman

相关问题