当用户使用Facebook进行身份验证时,他们可以选择拒绝所请求的权限。
Facebook允许我们通过添加以下内容来重新询问权限:auth_type:'rerequest'(https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.0#re-asking-declined-permissions)
我找不到重新请求最初使用Firebase拒绝的权限的方法。
有谁知道怎么样?
贾罗德
更新:最佳解决方法
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上删除我的应用程序
是的,我知道用户不会这样做,但是在FirebaseUI正确地重新请求权限之前,我正在走这条路。如果我从一开始就没有授权所有权限的用户,那就这样吧。我在这里采用帕累托原则。
{
provider: firebase.auth.FacebookAuthProvider.PROVIDER_ID,
scopes: [
'public_profile',
'email',
'user_likes',
'user_friends'
],
customParameters: {
// Forces password re-entry.
auth_type: 'reauthenticate'
}
},
我现在不是答案但是......也只是偶然发现,如果用户拒绝给他的电子邮件,应用程序进入循环,在没有电子邮件的情况下进行登录,并且不会让用户有机会让用户允许信息。在我的观点中,这是firebase facebook oauth的一个相当不足之处。我打算开发我的应用程序,希望没有用户认为拒绝电子邮件信息。
Firebase facebook oauth必须包含对auth_type = rerequest的支持才能解决此问题。