我已經閱讀了FB文檔的一個負載,但仍然無法正常工作。Facebook客戶端身份驗證 - 來自OAuth對話框的http或https重定向
我有一個FB應用程序在IFrame中運行。我正在使用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到服務器)
_「redirect_uri = // apps.facebook.com/myapp」,// NOT WORKING_ - 是你的主問題?如果是這樣,您可以輕鬆地讀出用JS在iframe中請求應用程序URL的協議,它位於_location.protocol_屬性中。 – CBroe
如何閱讀協議?該應用程序在IFrame中,根據定義,它不在Facebook上。所以同源策略阻止我從頂部窗口讀取URL。這正是我需要的,請詳細解釋如何做到這一點。 – njr101
我寫道:「用於在iframe中請求_your應用的URL_的協議」...如果用戶通過HTTPS瀏覽Facebook,那麼將調用您的應用的HTTPS版本;如果他只使用HTTP,那麼它就是你的應用程序的HTTP版本。因此,通過嚴格的數學邏輯,我們可以從中推導出:應用協議== Facebook協議。你讀過前者,你可以在不違反SOP的情況下做到這一點,並且知道將用戶發送到Facebook時使用哪一個...不是很簡單,一旦你思考它...? – CBroe