Play Framework在通过OAuth2在Facebook身份验证后附加#_=_以重定向?

2022-09-02 21:37:49

我在使用Play Framework调用OAuth2::retrieveAccessToken()后进行简单的重定向。我在URL上附加了有趣的字符,我从未放在那里,所以最终结果如下所示:

http://localhost:9000/#_=_

#_=_ 到底是从哪里来的?以下是我在路由文件中的路由定义:

GET / Application.index

以下是处理 Facebook 身份验证的控制器的代码片段:

public static void facebookConnect() {
    OAuth2 facebook = new OAuth2(
        "https://graph.facebook.com/oauth/authorize",
        "https://graph.facebook.com/oauth/access_token",
        "2#############6",
        "c##############################2"
    );

    if(OAuth2.isCodeResponse()) {
        OAuth2.Response oauthResponse = facebook.retrieveAccessToken(facebookAuthUrl());
        if(oauthResponse.error == null) {
            //... Somewhere here, something is causing #_=_ to be appended to the URL?
            Application.index();
        }
    }
    facebook.retrieveVerificationCode(facebookAuthUrl());
}

编辑:

根据此页面,Facebook最近更改了他们的API,以包含=如果request_uri为空,则问题是...我的request_uri已明确设置?


答案 1

这是在安全更新之后添加的。

来自 Facebook 开发者博客

会话重定向行为中的更改

本周,当此字段留空时,我们开始向redirect_uri添加一个片段。请确保您的应用可以处理此行为。#_=_


答案 2

也许这些字符来自Facebook回调。我收到一个FB回拨,就像

localhost:9000?someparams#code=verylongcodefromfacebook

我可以通过在请求访问令牌之前清理参数来摆脱#。