使用Play 2.0.1和RestFB访问已签名的Facebook JSON

时间:2012-11-12 20:44:17

标签: facebook-graph-api playframework-2.0 restfb

我正在编写一个Play 2.0.1应用程序,该应用程序将部署在Facebook的画布页面中。我正在使用restFB作为Facebook API。

通过在https://developers.facebook.com/tools/explorer?method=GET手动创建访问令牌,我可以让我的应用程序访问Facebook用户的名称,并在Facebook的Canvas页面iFrame中呈现它。

因此,我的app控制器收到POST并呈现如下页面:

public static Result handle_fb_post() {         
    return redirect(routes.canvas.fb_render_profile_page());
}

public static Result fb_render_profile_page() {
     String accessToken = "<access token copied from facebook graph explorer>";     
     DefaultFacebookClient().getExtendedAccessToken(application_id, application_secret);
     FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
     User fbUser = facebookClient.fetchObject("me", com.restfb.types.User.class);
     return ok(views.html.fbuser.render(fbUser));
}

我的路线设置为:

POST    /fbcanvas/  controllers.FBCanvas.handle_fb_post()
GET     /fbcanvas/profile controllers.FBCanvas.fb_render_profile_page()

但是,如何才能访问Facebook在POST中发送给我的签名JSON?我相信这也包含来自用户的访问令牌(假设他们已授权我的应用程序),如下所述:

https://developers.facebook.com/docs/samples/canvas/(请参阅“signed_request参数”部分)。

Java,PHP,Javascript和Python有很多例子,但我找不到任何描述如何在Play 2或使用RestFB中执行此操作的示例。我尝试了许多不同的方法,但无法解决如何在Play 2中访问已签名的请求。

任何人都可以帮忙解释如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

如果令牌在POST请求中作为Json发送,您可以通过

获取它
def handle_post() = Action { implicit request =>
  val jsonBody = request.body.asJson
  //process it
}