【发布时间】:2015-10-16 12:06:49
【问题描述】:
我已经使用 Play2.3 scala 开发了 web-socket,我正在尝试使用 oauth-provider 在 Play scala web-socket 中实现 oauth2。
web-socket的代码sn-p:
object LoginWS {
def props(out: ActorRef) = Props(new LoginWS(out))
}
class LoginWS(out: ActorRef) extends Actor {
def receive = {
case json_req: JsObject =>
val login_status : String = "Success"
out ! Json.toJson(JsObject(Seq("login_status" -> JsString(login_status))))
}
}
object WebSocketController extends Controller {
def login = WebSocket.acceptWithActor[JsValue, JsValue] { request =>
out =>
LoginWS.props(out)
}
}
REST服务的oauth2的代码sn-p:
我已将“scala-oauth2-provider-slick”示例用于 oauth2 实现。
trait MyOAuth extends OAuth2Provider {
override val tokenEndpoint: TokenEndpoint = MyTokenEndpoint
}
object OAuth2Controller extends Controller with MyOAuth {
val cats = TableQuery[CatsTable]
implicit val catFormat = Json.format[Cat]
def accessToken = Action.async { implicit request =>
issueAccessToken(new Oauth2DataHandler())
}
def list = Action.async { implicit request =>
authorize(new Oauth2DataHandler()) { authInfo =>
DBAction { implicit rs =>
Ok(toJson(cats.list))
}.apply(request)
}
}
}
如何在上面的 web-socket 代码中实现 oauth2?
有人知道,如何为上述 web-socket 实现 oauth2?
更新:
我尝试实现 oauth 和 web socket:
代码 sn-p:
def login = WebSocket.tryAcceptWithActor[JsValue, JsValue] { request =>
authorize(new Oauth2DataHandler()) { authInfo =>
val user = authInfo.user // User is defined on your system
println(user.toString())
}
}
遇到以下问题:
1) polymorphic expression cannot be instantiated to expected type; found : [A]scala.concurrent.Future[play.api.mvc.Result] required: Either[play.api.mvc.Result,play.api.mvc.WebSocket.HandlerProps] (which expands to) Either[play.api.mvc.Result,akka.actor.ActorRef ⇒ akka.actor.Props]
2) type mismatch; found : Unit required: scala.concurrent.Future[play.api.mvc.Result]
【问题讨论】:
标签: scala playframework websocket oauth-2.0 playframework-2.3