2014-04-03 36 views
2

我一直在尋找一些有關如何在Play框架(版本2.2.2)中執行OAuth的文檔,但我找不到任何東西。我在一個地方看過它已被棄用,但我還沒有找到任何關於這個的地方。有人知道嗎?我想連接到Twitter API並在我的應用程序中提出一些數據請求。Play Framework中的OAuth 2.2.2

回答

-1

它的支持,實際上非常直截了當。

下面直接是一個OAuth授權例如從Play Docs

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人員將其遺留下來的原因。

+0

作者提出了建議 - 並告訴他「很容易實現」〜這不是很有建設性。 – bharal