たくさんのFBドキュメントを読みましたが、それでもこれを機能させることができません。
IFrameで実行しているFBアプリがあります。JSSDKを使用してユーザーを認証しています。そのため、ユーザーが以前に私のアプリを使用したことがない場合は、承認を求めるプロンプトを表示する必要があります。
使ってみFB.Login()
ましたが、これには2つの大きな問題があります。
- 醜いポップアップが開きます
- ログイン画面を自動的に表示したい(つまり、ユーザーがもう一度クリックする必要がない)
そこで、代わりにクライアントの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を渡すことであるため、サーバー側のフローを使用したくありません)