2

我正在实现一个带有 FB 服务器端登录的网站,简化步骤如下:

  1. 一个简单的按钮触发调用我的后端 API 的 JS 脚本https://localhost/fblogin

    function sendFbLoginData() {
        $.get("https://localhost/fblogin", function(data, status) {});
    }
    
  2. 在 /fblogin 的后端处理程序中,用户被重定向到 FB 登录对话框以请求权限和访问令牌。

    func (ct *LoginController) FbLogin() {
        url := "https://www.facebook.com/dialog/oauth?client_id=xxx&redirect_uri=https://localhost/fboauth2cb&response_type=code&scope=public_profile"
        ct.Redirect(url, 302)
        return
    }
    
  3. 在浏览器控制台显示错误消息:

    XMLHttpRequest cannot load https://www.facebook.com/dialog/oauth?client_id=xxx&redirect_ur…e_type=code&scope=public_profile. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost' is therefore not allowed access.
    

谷歌搜索后,我意识到这是一个 CORS 问题。由于我无法改变 Facebook 的行为,我该如何处理这个问题?还是从根本上说我以错误的方式进行 fb 服务器端登录?

附言。我的环境是 AWS + Beego (golang)

4

2 回答 2

2

你不能向https://www.facebook.com/dialog/oauth?...JavaScript 请求并等待它的结果;该页面旨在显示在浏览器中,以便 Facebook 可以要求用户提供其凭据并允许在您的应用中使用他的帐户。

所以,而不是:

    $.get("https://localhost/fblogin", function(data, status) {});

你应该使用类似的东西:

    location = "https://localhost/fblogin";
于 2016-05-04T15:30:51.957 回答
0

在 Facebook 的设置选项卡中的应用程序设置中(类似于https://developers.facebook.com/apps/{app-id}/settings/),您应该将您的网站 URL 设置为,https://localhost/以便它可以将其识别为有效的重定向

于 2014-12-31T04:56:02.963 回答