播放scala Oauth Twitter示例并重定向

时间:2014-04-03 21:15:44

标签: scala playframework oauth-2.0 twitter-oauth

使用Oauth和Twitter的游戏示例如下所示。

在Play Framework中,我仍在学习如何使用重定向和路由。您将如何设置路径文件和Appliction.scala文件来处理此重定向?

Redirect(routes.Application.index).withSession("token" -> t.token, "secret" -> t.secret)

路线会是这样的吗?

GET /index  controllers.Application.index(String, String)

使用示例代码http://www.playframework.com/documentation/2.0/ScalaOAuth

链接到Play Framework文档
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)
    }
  }
}

2 个答案:

答案 0 :(得分:1)

事实证明,我遇到路由和重定向这么多间歇性问题的原因是游戏版本,scala版本和Eclipse版ScalaIDE版本的组合。使用Play版本2.2.3,scala版本2.10.4和ScalaIDE版本2.10.x解决了路由和重定向问题。

Twitter示例需要以下import语句。

import play.api.libs.oauth.ConsumerKey
import play.api.libs.oauth.ServiceInfo
import play.api.libs.oauth.OAuth
import play.api.libs.oauth.RequestToken

答案 1 :(得分:0)

如果您的路线是这样的:

GET /index controllers.Application.index(param1:String, param2:String)

然后反向路线看起来像这样:

routes.Application.index("p1", "p2")

这会导致类似这样的事情:

/index?param1=p1&param2=p2

确保您所查看的文档的版本正确,对于2.2.x,您需要此网址:http://www.playframework.com/documentation/2.2.x/ScalaOAuth