即使他/她已登录,如何强制用户重新输入 Facebook 密码

bob*_*bek 2 authentication facebook facebook-authentication

我试图让用户在进入我网站的某些部分时重新输入密码。我读过我应该使用“重新验证”授权类型来解决这个问题,但我遇到了两个问题。

  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>
Run Code Online (Sandbox Code Playgroud)

编辑:

我尝试更改<fb:login-button />to<div />标记,但它根本没有帮助。

非常感谢!

Nit*_*mer 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' });
Run Code Online (Sandbox Code Playgroud)

编辑

是的,您是对的,即使用户取消重新认证,也会执行回调并且状态为“已连接”。
这可能是一个错误或其他问题,但从我现在所做的测试来看,如果用户成功完成重新身份验证过程,那么令牌就会发生变化,因此这可能会起作用:

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' });
Run Code Online (Sandbox Code Playgroud)