播放框架2.3.x OAuth&演员"在这里找不到HTTP请求标头"

时间:2015-02-15 20:25:36

标签: scala playframework akka twitter-oauth

我正在使用Play的ScalaOAuth documentation中的示例代码对twitter API进行身份验证。我的完整代码在这里:

object Twitter extends Controller {

  val KEY = ConsumerKey("redacted")

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),
true)

def authenticate = Action { request =>
request.getQueryString("oauth_verifier").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.timeline).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)
}
}

}

我启动了一个我想用来搜索Twitter API的演员。我还在该文档中使用其控制器的编辑版本来执行此操作:

 class TwitterParse extends Actor {

private var buildURL: String = _
private val urlBoilerPlate = "https://api.twitter.com/1.1/users/search.json?q="
private val pageCount = "&page=1&count=3"

 def receive = {
case rawName: (Long, String) => { 

  buildURL = urlBoilerPlate + rawName._2 + pageCount

  Twitter.sessionTokenPair match {
    case Some(credentials) => {
      WS.url(buildURL)
        .sign(OAuthCalculator(Twitter.KEY, credentials))
        .get
        .map(result => println(result.json))
    }

  }

}

当我编译时,我得到:“在这里找不到任何HTTP请求标题”在Twitter.sessionTokenPair调用上。这可能与他们的文档中包含

的事实有关
Action.async { implicit request =>

在调用sessionTokenPair之前。我如何解决这个问题,以便它在Actor中起作用?

提前致谢

0 个答案:

没有答案