我有一个项目,它使用firebase auth和firebaseUI来验证用户.我启用了Google,Facebook和电子邮件提供商.我需要的是远程注销或禁用某些用户.
我希望用户在这样做时从应用程序注销.我尝试在firebase控制台中禁用该用户,并使用firebase管理SDK(https://firebase.google.com/docs/auth/admin/manage-sessions)撤消刷新令牌.
我等了2天以上,仍然注意到用户已登录并可以访问firestore数据.
我也经历了尝试 Firebase在删除后仍然检索authData
谁能指出我做错了什么?
我使用Firebase Quickstarts for Android Auth示例,然后我在firebase仪表板中创建了一个用户,使用电子邮件和密码登录用户,用户成功登录.但是当我删除用户时,它仍然登录并显示旧用户的电子邮件(user.getEmail())
// [START auth_state_listener]
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getEmail());
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// [START_EXCLUDE]
updateUI(user);
// [END_EXCLUDE]
}
};
// [END auth_state_listener]
Run Code Online (Sandbox Code Playgroud)
我的firebase仪表板中的用户和AuthStateListener都没有用户登录的用户.
怎么可能呢?
我遇到了使用电子邮件/密码登录Firebase简单登录的奇怪行为:如果我使用现有用户帐户登录,我可以写入Firebase ref(即$ root/list/$ item).如果没有,我没有按预期的写访问权限(Firebase规则似乎没问题),但是如果客户端已登录,并且我同时从Firebase Forge(Auth页面)删除用户,则连接的客户端仍然可以写入访问权限. Firebase参考!它是设计还是错误?谢谢.
这是规则:
{
"rules": {
".read": true,
"list": {
"$item": {
".write": "auth != null && newData.child('author').val() == auth.id",
".validate": "newData.hasChildren(['author', 'content'])",
"author": {
".validate": "newData.val() == auth.id"
},
"content": {
".validate": "newData.isString()"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 所以我设置了电子邮件/密码注册和登录。
那是有效的。我认为 Firebase 解决了这个问题,但显然没有。我希望在用户关闭应用程序后,下次打开应用程序时已经登录。
有什么不见了?
class LoginActivity : AppCompatActivity(){
lateinit var auth: FirebaseAuth
lateinit var user: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
}
fun loginLoginClicked(view: View) {
// Perform login
val email = loginEmailTxt.text.toString()
val password = loginPasswordTxt.text.toString()
auth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener {
finish()
}
.addOnFailureListener { exception ->
Log.e("Exception", "Could not sign in user - ${exception.localizedMessage}")
}
val loginIntent = Intent(this, MainActivity::class.java)
startActivity(loginIntent)
}
fun loginCreateClicked(view: View) {
// segue to the create user activity …
Run Code Online (Sandbox Code Playgroud) 通过Login&Auth firebase Web界面的Registered Users部分删除用户时,不会触发onAuth方法,并且用户仍然登录并能够写入数据库.如何确保用户的会话被销毁然后用户被删除?
我手动删除了 Firebase 用户,然后从设备(物理 iPhone)中删除了该应用程序,然后当我安装它时,它通过身份验证检查打印已删除的用户电子邮件和所有内容。这是我用来检查用户是否存在的方法
home: FutureBuilder<FirebaseUser>(future: Provider.of<AuthService>(context).getUser(),
builder: (context, AsyncSnapshot<FirebaseUser> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.error != null) {
print('error');
return Text(snapshot.error.toString());
}
user = snapshot.data;
print(user.email);
return snapshot.hasData ? HomeScreen(user, pos) : LoginScreen();
} else {
return LoadingCircle();
}
},
)
Run Code Online (Sandbox Code Playgroud)
这怎么可能?谁能解释一下,当我从 Firebase 上的 Auth Users 中删除该用户时,为什么该用户仍然存在?