[英]secure social websockets play framework
如何使用Scala securesocial在播放框架中保護Websocket調用?
def statusfeed() = WebSocket.using[String] { implicit request =>
if (logged in) {
...
else {
}
}
謝謝,
編輯1:
嘗試過此操作但沒有用,總是“未登錄”
def statusfeed() = WebSocket.using[String] { implicit request =>
var in = Iteratee.ignore[String]
var out = Enumerator.empty[String]
session.get("userId").map { sessionId =>
//sessionId is now userId in session
//check he is authorise to view page or not
// Ok("user in session")
def getLoadAverage = {
"%1.2f" format
ManagementFactory.getOperatingSystemMXBean.getSystemLoadAverage()
}
in = Iteratee.ignore[String]
out = Enumerator.repeatM {
Promise.timeout(getLoadAverage, 3 seconds)
}
}.getOrElse {
log.info("not logged in")
//any thing that you want when he is not in session
Redirect("/") //NOT IN SESSION REDIRECT TO LOGIN PAGE
}
(in, out)
}
編輯2:用SecureSocial.USER_KEY替換userId也不起作用
這有效,但不是慣用的scala
def getUser(req: RequestHeader):String = {
val authenticator = SecureSocial.authenticatorFromRequest(req)
if (authenticator.isEmpty) {
return null
}
val auth = UserService.find(authenticator.get.identityId)
auth.get.identityId.userId
}
def statusfeed() = WebSocket.using[String] { implicit request =>
implicit val req = request
val user = getUser(req)
....
然后測試用戶!= null
或更簡單
def statusfeed() = WebSocket.using[String] { implicit request =>
SecureSocial.currentUser(request) match {
case Some(userid) => ... success
case None => ... failed
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.