我正在使用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
答案 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服务器端的人!