我已经阅读了大量 FB 文档,但仍然无法正常工作。
我有一个在 IFrame 中运行的 FB 应用程序。我正在使用 JS SDK 对用户进行身份验证。因此,如果用户之前没有使用过我的应用程序,我需要提示他们进行授权。
我尝试使用FB.Login()
,但这有两个大问题:
- 它打开一个丑陋的弹出窗口
- 我希望登录屏幕自动出现(即不需要用户再次点击)
因此,我尝试重定向到客户端上的 OAuth 对话框。为此,必须在顶部窗口中打开 OAuth url,这意味着我需要将 redirect_uri 作为 apps.facebook.com/myapp 传递。
问题是这只有在我使用 https 作为协议时才有效。但是,如果用户已经通过 http 使用 facebook,我不想将它们切换到 https。
这是我的代码:
window.fbAsyncInit = function () {
FB.init({
appId: 1234567890,
channelUrl: "//mydomain.com/channel.html",
status: true,
cookie: true,
xfbml: true
});
FB.Event.subscribe('auth.statusChange', function (response) {
console.log(response);
if (response.status === "connected") {
// User has authorized app
} else if (response.status === "not_authorized") {
var url = "//www.facebook.com/dialog/oauth?";
var queryParams = ["client_id=1234567890",
"redirect_uri=//apps.facebook.com/myapp", // NOT WORKING
"response_type=token"];
var queryString = queryParams.join("&");
url += queryString;
window.top.location = url;
}
});
};
有没有办法使用 OAuth 对话框使用客户端流程进行身份验证?或者我会以完全错误的方式解决这个问题?
(PS我不想使用服务器端流程,因为根据Facebook C# SDK的v6,推荐的方法是在客户端授权并将access_token从客户端传递给服务器)