如何检查用户是不是验证邮件然后让登录?
Posted
技术标签:
【中文标题】如何检查用户是不是验证邮件然后让登录?【英文标题】:How check if user verify mail and then let logged in?如何检查用户是否验证邮件然后让登录? 【发布时间】:2021-06-03 08:10:33 【问题描述】:我知道这个问题问了很多次,但在花了几个小时试图理解之后,我仍然不知道该怎么做。
所以我知道我有 2 个 Future 方法
登录
Future<String> signIN(String email, String password) async
try
(await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email.trim(),
password: password,
))
.user;
on FirebaseAuthException catch (e)
switch (e.code)
case 'invalid-email':
return 'Email is not valid';
case 'user-disabled':
return 'Account is not active';
case 'user-not-found':
return 'No user found';
case 'wrong-password':
return 'wrong password';
default:
return 'Unexpected error!';
return null;
然后注册
Future<String> signUp(String email, String password) async
try
(await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email.trim(),
password: password,
))
.user
.sendEmailVerification();
on FirebaseAuthException catch (e)
switch (e.code)
case 'invalid-email':
return 'Email is not valid';
case 'user-disabled':
return 'Account is not active';
case 'user-not-found':
return 'No user found';
case 'wrong-password':
return 'wrong password';
default:
return 'Unexpected error!';
return null;
我希望我知道如何首先检查用户是否验证了邮件,然后让他登录。 正确知道用户按下注册按钮并自动登录。
请帮忙!!
这里是按下的方法
首先按下注册按钮
onPressed: () async
if (_formKey.currentState.validate())
String authError = await _auth.signUp(email, password);
if (authError != null)
setState(() => jawoll = true);
setState(() => error = authError);
else
setState(() => loading = true);
setState(() => jawoll = false);
setState(() => error = "Email send to $email");
还有登录按钮
onPressed: () async
if (_formKey.currentState.validate())
String authError = await _auth.signIN(email, password);
if (authError != null)
setState(() => error = authError);
print("olaaa");
print(error);
setState(() => loading = false);
【问题讨论】:
【参考方案1】:从小部件树中删除负责自动登录用户的流 (authStateChanges)。
然后,手动推送一个新的电子邮件注册屏幕。完成后让您的用户转到主屏幕。
以后再次打开应用程序时,您可以检查用户是否已登录以及电子邮件是否经过验证。如果是,请转到主屏幕,如果不是,请转到登录屏幕。
这里的问题是用户登录时流会自动更改,无论电子邮件是否经过验证。所以,删除它并继续!
【讨论】:
感谢您的回答。但实际上我不希望用户进入新页面来验证他的邮件。我希望该用户可以转到他的电子邮件帐户以验证他已发送的邮件,然后返回我的应用程序并登录。 当然。这也可以以同样的方式轻松完成。只需按下“完成”按钮触发验证,显示“请验证您的电子邮件”之类的小吃吧,您就完成了! 好的,现在我想我明白了,但是我如何询问电子邮件是否经过验证,您能否显示代码示例或告诉我如何在我的代码中执行此操作?? 当然。所以这可以通过在用户类上调用 isEmailVerified 来完成。方法可以看here。以上是关于如何检查用户是不是验证邮件然后让登录?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证
如何在 AWS Amplify for Flutter 中检查用户是不是已确认(电子邮件/电话验证)