Firebase Facebook身份验证 - 重新请求权限

时间:2015-02-16 03:14:37

标签: facebook login permissions firebase

当用户使用Facebook进行身份验证时,他们可以选择拒绝所请求的权限。

Facebook允许我们通过添加以下内容来重新询问权限:auth_type:' rerequest' (https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.0#re-asking-declined-permissions

我无法找到重新请求最初使用Firebase拒绝的权限的方法。

有谁知道怎么做?

贾罗德

3 个答案:

答案 0 :(得分:2)

更新:最佳解决方法

Facebook登录:用户点击登录Facebook按钮并拒绝所需权限或在Facebook弹出登录窗口中选择“Not Now”。用户登录到您的网站,但您希望确保用户授权您所需的权限。

在您的signInSuccess回调中:如果用户登录并拒绝您的权限,您应立即从Facebook应用中删除您的用户。

然后立即退出您的用户;强制进行另一次登录尝试。

用户将尝试再次登录,Facebook将再次请求权限。这一直持续到用户允许或放弃为止。这就是我正在使用的。

var usersFacebookToken = credential.accessToken;
var fbPermissionsUrl = `https://graph.facebook.com/me/permissions?access_token=${usersFacebookToken}`

$http.get(fbPermissionsUrl)
    .then(function(response) {
        let facebookPerms = response.data.data;

        facebookPerms.forEach(function(item) {
            if (item.permission === 'email' && item.status === 'declined' || item.permission === 'user_posts' && item.status === 'declined') {
                console.log(`${item.permission} denied`)
                    // remove user from my facebook app

                $http({
                    method: 'POST',
                    url: `https://graph.facebook.com/me/permissions?method=delete&access_token=${fbUserAccessToken}`
                }).then(function successCallback(response) {
                    // this user has been deleted from the FACEBOOK APP
                    // when user does Facebook login/signup again
                    // then permissions will be requested again
                    return true;

                }, function errorCallback(error) {
                    // called asynchronously if an error occurs
                    // or server returns response with an error status.
                    console.error(error)
                });

                alert("Email and user posts history are required")
                delete $scope.currentUser;
                firebase.auth().signOut();
            }
        })

    });

<强>上

我已经实现了customParameters,并且它们会被传递到Facebook,但即使使用auth_type: 'reauthenticate' or auth_type: 'rerequest',也不会再次提示用户允许权限。

我将考虑从我的Facebook应用程序中删除用户,然后再次提示登录。在引用此线程时:Is there a way to delete users for your Facebook Application? 在那之前...

解决方法:让用户删除在Facebook注册的应用,然后再次登录您的网站。然后,系统将提示用户通过范围授权您的请求的任何权限。

将用户指向此处,让他们找到您的应用,然后点击模式底部的小字体中删除应用: https://www.facebook.com/settings?tab=applications

这是传递customParameters 的参考: 检查Github上的链接:https://github.com/firebase/firebaseui-web#configure-oauth-providers

    {
  provider: firebase.auth.FacebookAuthProvider.PROVIDER_ID,
  scopes: [
    'public_profile',
    'email',
    'user_likes',
    'user_friends'
  ],
  customParameters: {
    // Forces password re-entry.
    auth_type: 'reauthenticate'
  }
},

以下是我指示我的用户在Facebook上删除我的应用

  1. 第1步 - 转到此链接
  2. 第2步 - 找到应用程序TEFL.pro
  3. 步骤3 - 单击模式底部的删除应用程序
  4. 第4步 - 再次使用Facebook登录
  5. 是的,我知道用户不会这样做,但是在FirebaseUI正确地重新请求权限之前,我就是这条路线。如果我从一开始就没有授权所有权限的用户,那就这样吧。我在这里使用帕累托原则

    Facebook List of Apps

    Click remove app

答案 1 :(得分:0)

I now it's no an answer but... Just stumble on this too, if the user decline giving his email the app enters on a loop, doing the login without the email and doesn't give the user a chance to user allow the information. It is a pretty deficiency on firebase facebook oauth in my point. I'm going to develop my app hoping that none of the users think in decline the email information.

Firebase facebook oauth must include support for auth_type=rerequest in order to fix this.

答案 2 :(得分:0)

您可以使用setCustomParameters设置自定义提供程序值。在这种情况下,您要做的就是像下面这样调用它以重新请求权限。

provider.setCustomParameters({
  auth_type: 'rerequest'
});

链接到文档:https://firebase.google.com/docs/auth/web/facebook-login