【问题标题】:Securesocial - get user data in custom viewSecuresocial - 在自定义视图中获取用户数据
【发布时间】:2014-01-16 15:24:48
【问题描述】:

我开始为自己使用自定义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),没有关于用户的任何信息上下文 - 因此,即使用户已登录,在密码更改期间,工具栏也会显示“欢迎,访客”,并且相应的菜单将显示例如“登录”和“注册”,尽管事实上用户在密码更改期间已登录。

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

【问题讨论】:

    标签: java scala playframework playframework-2.2 securesocial


    【解决方案1】:

    看起来user 为空。您是否将其填充到您的代码中?

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

    Create model class in Scala with Play 2 Framework

    【讨论】:

    • 用户为'null',这就是问题所在——我不知道如何将用户实例传递给我的自定义视图,因为它是从securesocial 提供的控制器中调用的。准确地说,这是调用序列:PasswordChange.page(内置控制器)-> MyViews.getPasswordChangePage(我自己的插件处理模板生成)-> passwordChange.scala.html(我的自定义模板)我想做的是获取“用户”实例并将其传递给模板,但我不想(如果可能的话)修改内置控制器类。
    【解决方案2】:

    解决方案非常简单和时尚 - 我没有从 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 代码的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 2012-11-25
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多