更新:最佳解决方法
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 应用程序中删除用户,然后再次提示登录。引用此线程: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 步 - 转到此链接
- 第 2 步 - 找到应用 TEFL.pro
- 第 3 步 - 点击模式底部的删除应用程序
- 第 4 步 - 再次使用 Facebook 登录
是的,我知道用户不会这样做,但在 FirebaseUI 正确重新请求权限之前,我会走这条路。如果我失去了一个从一开始就没有授权所需权限的用户,那就这样吧。我在这里使用帕累托原理。