当用户使用Facebook进行身份验证时,他们可以选择拒绝所请求的权限。
Facebook允许我们通过添加以下内容来重新询问权限:auth_type:' rerequest' (https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.0#re-asking-declined-permissions)
我无法找到重新请求最初使用Firebase拒绝的权限的方法。
有谁知道怎么做?
贾罗德
答案 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 :(得分: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