Securesocial - 在自定义视图中获取用户数据

时间:2014-01-16 15:24:49

标签: java scala playframework playframework-2.2 securesocial

我开始为自己使用自定义securesocial并在自定义视图时遇到一个问题 - 我试图在窗口顶部创建持久工具栏模板,文字如下:

Welcome,
@if(user != null) {
  @user.firstName @user.lastName
} else {
  @Messages("Guest")
}

此工具栏在自定义主视图中生成:

@(title: String, user: securesocial.core.Identity = null)(content: Html)

从代码中调用(index.scala.html示例):

@main("App test",user) 

尝试使用自定义视图时遇到问题 - 尤其是passwordChange.scala.html。此视图是从securesocial(PasswordChange)提供的标准控制器调用的,然后将控制传递给我自己的插件(MyViews,它具有渲染视图的简单实现并扩展TemplatesPlugin),不会t具有关于用户上下文的任何信息 - 因此即使用户已登录,在密码更改期间,工具栏将显示“欢迎,来宾”,并且相应的菜单将显示例如“登录”和“注册”,尽管用户在登录期间登录密码更改。

任何人都可以为我提供解决方案,将用户信息传递给我的自定义视图(最好不要重写内置控制器中的securesocial)吗?

2 个答案:

答案 0 :(得分:0)

看起来user为空。你在代码中填充它吗?

您还需要在user模型中添加查询才能找到它。例如,检查一下:

Create model class in Scala with Play 2 Framework

答案 1 :(得分:0)

解决方案非常简单和流畅 - 而不是从HTTP Context对象(这部分代码中不可用)填充用户,我从隐式请求填充用户,然后将变量传递给我的自定义模板:

  def getPasswordChangePage[A](implicit request: SecuredRequest[A], form: Form[ChangeInfo]): Html = {
    val userName = request.user
    views.html.secure.Registration.passwordChange(request, userName, form)
  }

上面的代码是MyViews.scala代码的一部分。