Auth0解耦客户端/服务器端

时间:2016-06-21 10:26:52

标签: angularjs scala playframework auth0

我正在使用Play Framework Scala和客户端AngularJS开发一个服务器端的应用程序。

我只想在服务器端管理身份验证,因为我必须保护API和应用程序本身,并且我希望保持会话"集中化"在我的服务器上。

但由于我没有使用Play Framework视图模板(为了保持我的客户端和我的服务器端独立),我无法将用户配置文件信息传递给客户端,就像在示例中所做的那样。

我试图在我的Angular模板上列出我的缓存和Cookie键,但我似乎找不到任何东西。

有什么办法可以使用Angular获取会话信息吗?由Play Framework请求和管理会话? (我无法在文档的任何地方找到它)

以下是我如何呈现我的Angular客户端首页(Play框架仅执行API路由和此首页路由)

  def frontPage() = AuthenticatedAction {
    request =>
      val idToken = request.session.get("idToken").get
      val profile = cache.get[JsValue](idToken + "profile").get
      Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html")
  }

以下是在docs示例中的完成方式:

def index = AuthenticatedAction { request =>
  val idToken = request.session.get("idToken").get
  val profile = Cache.getAs[JsValue](idToken + "profile").get
  Ok(views.html.user(profile))
}

我需要得到那个"个人资料"在我的模板中,但我不想使用scala html模板:我想继续使用纯Angular模板来保持我的客户端/服务器端独立(仅通过API进行通信)

编辑2016年6月21日:我没有找到直接从Angular获取会话信息的方法,但我能够通过扩展我的API来返回它,我更喜欢这个解决方案!见https://stackoverflow.com/a/37942787/4884034

2 个答案:

答案 0 :(得分:1)

您可以使用以下方式将其呈现给客户端:

Ok
  .sendFile(content = new File("./public/layout.html"), inline = true).as("text/html")
  .withSession(session)

.withCookies(cookie)

答案 1 :(得分:0)

所以,感谢@Simon指出我正确的方向。

我现在正在登录后发送会话:

  Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html").withSession("connected" -> profile.toString())

我无法直接从Angular获取会话,所以我所做的是更新了我的API,以便返回会话信息:

  def getSession = Action { request =>
    request.session.get("connected").map {
      user => Ok(Json.parse(user))
    }.getOrElse {
      Unauthorized("Oops, you are not connected")
    }
  }

(在路线中:

## USER SESSION
GET        /api/session                      controllers.Callback.getSession

这样我可以调用API在我的客户端获取会话信息,可能是Angular,移动应用程序或任何类型的读取JSON的应用程序。

返回JSON的示例:

{"email":"XXX@XXX.com","email_verified":false,"clientID":"MvM2wHRX2rMKp5s3UXXXXXXXX","updated_at":"2016-06-21T10:59:49.730Z","picture":"https://s.gravatar.com/avatar/e91d5ae3XXXXXXXXXXX?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fda.png","user_id":"auth0|5XXXXXXXXX47b1b07d","name":"XXX@XXX.com","nickname":"XXX","identities":[{"user_id":"5767bea338XXXXXX","provider":"auth0","connection":"Username-Password-Authentication","isSocial":false}],"created_at":"2016-06-20T10:00:03.921Z","sub":"auth0|5767beXXXXXXX"}

我希望它能帮助任何试图从客户端获得一个解耦的Play Framework服务器端的人!