3
http://X.com:8080/X/#_=_

这是我成功登录后得到的 URL

我似乎也无法用backbone.js 捕捉这些字符,所以我真的不明白如何克服这个问题。

任何人都知道为什么会发生这种情况?

    <org.springframework.social-version>1.1.0.M1</org.springframework.social-version>
    <org.springframework.social.facebook-version>1.1.0.M1</org.springframework.social.facebook-version>

以及对服务器的调用(使用把手你可以想象提供者是什么):

 <script type="text/x-handlebars-template" id="provider-login-btn-template">
    <form action="signin/{{provider}}" method="POST" class="form" style="margin:0px">
        <fieldset>
            <div class="formRow">
                <input type="hidden" name="scope" value="email,publish_stream,offline_access" />    
                <input type="image" style="width:50px;height:50px" src="{{image_url}}" onsubmit="submit();" />
            </div>
        </fieldset>
    </form>
</script>

而已。我被重定向到 facebook,登录,然后返回/#_=_

谢谢你。

4

2 回答 2

1

一个非常老套的方法是只接受 Facebook 附加到 redirect_uri 的垃圾,并在骨干路由器中为其设置别名。例如,在我的应用程序中,用户在身份验证成功后被重定向到http://www.exampleapp.com/#,这将与我建立的主干路由相匹配:

ExampleApp.Routers.Router = Backbone.Router.extend({
  ...
  routes: {
    "": "index",
  },
  ...
});

Facebook 所做的问题是 window.href 末尾的“_ = _”破坏了主干路由器。所以我处理这个的hacky方法是简单地停止战斗并将垃圾别名匹配索引方法,如下所示:

ExampleApp.Routers.Router = Backbone.Router.extend({
  ...
  routes: {
    "": "index",
    "_=_": "index"
  },
  ...
});

然后,在“index”方法(或任何你称之为的方法)中,添加如下内容以使 url 更漂亮:

if (window.location.hash === "#_=_") {
    window.location.hash = "#";
}

现在,显然会有更复杂的情况,这不起作用,所以我写这个答案没有保证!

于 2015-01-08T06:43:58.023 回答
0

尝试从 spring social 中理解 ConnectController 类。

您可以使用覆盖的 connectionStatusRedirect 方法重定向到另一个 URL。

前任。

@Override
protected RedirectView connectionStatusRedirect(String providerId, NativeWebRequest request) {
    String path = "http://X.com:8080/X/facebookRedirect";

    return new RedirectView(path, true);
}
于 2014-03-31T12:35:03.813 回答