我一直在寻找一些关于如何在Play框架(版本2.2.2)中执行OAuth的文档,但我找不到任何东西。我在一个地方读到它已被弃用但我也无法找到任何相关信息。有人知道吗?我想连接到Twitter API并在我的应用程序中提出一些数据请求。
答案 0 :(得分:1)
您可以在这些开源项目中找到使用Play Framework的OAuth示例:
答案 1 :(得分:-1)
它得到了支持,而且非常直接。
这是直接来自Play Docs的OAuth授权示例:
object Twitter extends Controller {
val KEY = ConsumerKey("xxxxx", "xxxxx")
val TWITTER = OAuth(ServiceInfo(
"https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize", KEY),
false)
def authenticate = Action { request =>
request.queryString.get("oauth_verifier").flatMap(_.headOption).map { verifier =>
val tokenPair = sessionTokenPair(request).get
// We got the verifier; now get the access token, store it and back to index
TWITTER.retrieveAccessToken(tokenPair, verifier) match {
case Right(t) => {
// We received the authorized tokens in the OAuth object - store it before we proceed
Redirect(routes.Application.index).withSession("token" -> t.token, "secret" -> t.secret)
}
case Left(e) => throw e
}
}.getOrElse(
TWITTER.retrieveRequestToken("http://localhost:9000/auth") match {
case Right(t) => {
// We received the unauthorized tokens in the OAuth object - store it before we proceed
Redirect(TWITTER.redirectUrl(t.token)).withSession("token" -> t.token, "secret" -> t.secret)
}
case Left(e) => throw e
})
}
def sessionTokenPair(implicit request: RequestHeader): Option[RequestToken] = {
for {
token <- request.session.get("token")
secret <- request.session.get("secret")
} yield {
RequestToken(token, secret)
}
}
}
如果您想签署请求,可以这样做:
WS.url(s"https://api.twitter.com/1.1/account/verify_credentials.json")
.sign(OAuthCalculator(Key, RequestToken(token, tokenSecret)))
.get
请注意,以上内容适用于OAuth 1.0。 OAuth2很容易实现,没有专门的库,为什么Play人员将其遗漏了。