Auth0解耦客户端/服务器端
我正在开发一个具有使用Play Framework Scala的服务器端和客户端AngularJS的应用程序。Auth0解耦客户端/服务器端
我想仅在服务器端进行身份验证管理,因为我必须同时保护API和应用程序本身,并且要保持会话“集中”在我的服务器上。
但是由于我没有使用Play Framework视图模板(为了让我的客户端和我的服务器端独立),我无法像在示例中那样将用户配置文件信息传递到客户端。
我试图在我的Angular模板上列出我的缓存和我的Cookie键,但我似乎无法找到任何东西。
有没有什么办法可以使用Angular获取会话信息?由Play Framework请求和管理会话? (我不能在文档的任何地方找到它)
这是我如何使我的角客户端头版(播放框架只做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")
}
这是怎么了在文档例子做:
def index = AuthenticatedAction { request =>
val idToken = request.session.get("idToken").get
val profile = Cache.getAs[JsValue](idToken + "profile").get
Ok(views.html.user(profile))
}
我需要获得“轮廓”跨越我的模板,但我不希望有斯卡拉HTML模板:我想用纯角模板保持保持我的客户端/服务器端独立(仅通过API进行通信)
编辑21/06/2016:我没有找到直接从Angular获取会话信息的方法,但是我能够通过扩展API来返回它,并且我更喜欢该解决方案!看到https://*.com/a/37942787/4884034
所以,感谢@Simon指着我在正确的方向。
我现在在登录后发送会话:
Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html").withSession("connected" -> profile.toString())
我是不是能够直接从角获取会话,所以我做了什么,而不是被我更新了我的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":"[email protected]","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":"[email protected]","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"}
我希望这将帮助任何人试图从它的客户端有一个去耦播放框架服务器端!
你可以用它呈现到客户端:
Ok
.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html")
.withSession(session)
或.withCookies(cookie)
所以,我尝试了你的两个选项,第一个我仍然没有找到Angular上的任何东西,当我做$ cookies.getAll()时,对于withCookies我得到一个执行异常Cookie值包含一个无效的char: “withSession似乎是一个很好的解决方案,但它存储在哪里? – Daniel