2

私は、ユーザーが私のWebサイトの特定の部分を入力しているときに、ユーザーにパスワードを再入力させようとしています。これを解決するには「再認証」認証タイプを使用する必要があることを読みましたが、2つの問題が発生しています。

  1. ユーザーが「再認証」ボタンをクリックすると、「パスワード」入力ボックスにパスワードがすでに入力されています。

  2. ユーザーが[再認証]ボタンをクリックしてから、認証ウィンドウを閉じるか[キャンセル]をクリックすると、ログインしたデータを含む応答が返され、基本的にユーザーがサインインしたことをコードに「通知」します。

誰かがそれらの問題に遭遇したことがありますか?これが私のコードの一部です:

<fb:login-button id="facebook-reauth" onclick="return false;">Login with Facebook</fb:login-button>


<script type="text/javascript">
    $(document).ready(function () {
        document.getElementById('facebook-reauth').onclick = function () {
            FB.login(function (response) {
                if (response) {
                    window.location = '/Account/FacebookLogin?isCheckout=false';
                }
                else {
                    window.location = '/';
                }
            }, { scope: 'email', auth_type: 'reauthenticate' });
        };
    });
</script>

編集:

<fb:login-button />toタグを変更してみまし<div />たが、まったく役に立ちませんでした。

どうもありがとう!

4

3 に答える 3

5
  1. ブラウザがパスワードを記憶しているだけなので、パスワード フィールドはおそらく事前に入力されています。ブラウザでパスワードを消去するか、ブラウザが記憶していない別の電子メールを使用してみてください。

  2. をチェックするのを忘れただけだと思うresponse.authResponse​​ので、おそらく次のようになります。

.

FB.login(function (response) {
    if (response.authResponse) {
        window.location = '/Account/FacebookLogin?isCheckout=false';
    }
    else {
        window.location = '/';
    }
}, { scope: 'email', auth_type: 'reauthenticate' });

編集

はい、その通りです。ユーザーが再認証をキャンセルした場合でも、コールバックが実行され、ステータスが「接続済み」になります。
これはおそらくバグか何かですが、私が今行ったテストから、ユーザーが再認証プロセスを正常に終了した場合、トークンが変更されるように見えるため、これはおそらく機能するはずです:

var oldToken = FB.getAccessToken();

FB.login(function (response) {
    if (response.authResponse && response.authResponse.accessToken != oldToken) {
        window.location = '/Account/FacebookLogin?isCheckout=false';
    }
    else {
        window.location = '/';
    }
}, { scope: 'email', auth_type: 'reauthenticate' });
于 2012-06-26T15:27:46.283 に答える
1
if (response.status === 'connected') {
    /**
     * Even if the user cancels the re-authentication the callback is executed and the status is "connected".
     * This is probably a bug or something, but you can get info about the token and check that.    
     */
    FB.api('/debug_token', {
        input_token: response.authResponse.accessToken
    }, function(token_info) {

        if (typeof token_info.data.metadata != 'undefined') {

            if (token_info.data.metadata.auth_type == "reauthenticate") {

            }
        } else {
            //user did not re-authenticate so do nothing
        }
    });
}
于 2015-06-09T12:45:49.250 に答える