簡體   English   中英

安全的社交網絡套接字播放框架

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM