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

问题描述 投票:3回答:3

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

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

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

有谁知道怎么样?

贾罗德

facebook login permissions firebase
3个回答
3
投票

更新:最佳解决方法

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

在您的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应用程序中删除用户,然后再次提示登录。在引用这个帖子时:qazxsw poi直到那时......

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

在这里指导用户,让他们找到你的应用程序,然后点击模式底部的小字体删除应用程序:Is there a way to delete users for your Facebook Application?

这是传递customParameters的参考:检查Github上的链接:https://www.facebook.com/settings?tab=applications

https://github.com/firebase/firebaseui-web#configure-oauth-providers

以下是我如何指示我的用户在Facebook上删除我的应用程序

  1. 第1步 - 转到此链接
  2. 第2步 - 找到应用程序TEFL.pro
  3. 步骤3 - 单击模式底部的删除应用程序
  4. 第4步 - 再次登录Facebook

是的,我知道用户不会这样做,但是在FirebaseUI正确地重新请求权限之前,我正在走这条路。如果我从一开始就没有授权所有权限的用户,那就这样吧。我在这里采用帕累托原则。

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

Facebook List of Apps


0
投票

我现在不是答案但是......也只是偶然发现,如果用户拒绝给他的电子邮件,应用程序进入循环,在没有电子邮件的情况下进行登录,并且不会让用户有机会让用户允许信息。在我的观点中,这是firebase facebook oauth的一个相当不足之处。我打算开发我的应用程序,希望没有用户认为拒绝电子邮件信息。

Firebase facebook oauth必须包含对auth_type = rerequest的支持才能解决此问题。


0
投票

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

setCustomParameters

链接到文档:provider.setCustomParameters({ auth_type: 'rerequest' });

© www.soinside.com 2019 - 2024. All rights reserved.