firebase - 为什么我使用 EmailisVerifiyed bool 得到 stackoverflow 错误?
问题描述
我试图检查用户是否验证他的邮件,然后让登录,如果不是,那么就不行。在尝试了所有解决方案后,我来到了这个。我在 onauthchanges 上使用流,所以我知道这很困难,但这就是我正在尝试的,我有一个包装器''home'',所以如果用户为空,我会返回身份验证页面,如果用户电子邮件验证我试图返回主页。我在互联网上发现了 bool,但是当我启动我的应用程序时,我的包装类中出现堆栈溢出错误,也许任何人都可以检查:
class Wrapper extends StatelessWidget {
static const route='/Wrapper';
bool get isEmailVerified => isEmailVerified;
@override
Widget build(BuildContext context) {
//Auth.auth().currentUser.isEmailVerified;
//final user = Provider.of<UserCredential>(context);
final user = Provider.of<User>(context);
if(user== null ){
return Authenticate();
}else if(isEmailVerified==true){
return Homepage();
}else{
return Resedpasswort();
}
//return Home or Authenticate widget
}
}
resedpasswort 页面只是为了查看在所有工作中删除此内容时是否有错误。这是我的身份验证页面:
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
String error;
//Future<bool> isEmailVerified();
//create user obj based on FirebasedUser
Model.User _userFromFirebaseUser(User user) {
return user != null ? Model.User(uid: user.uid) : null;
}
//auth change user stream
Stream<Model.User> get user {
return FirebaseAuth.instance.authStateChanges().map(_userFromFirebaseUser);
}
//sign in anon
Future signInAnon() async {
try {
UserCredential result = await _auth.signInAnonymously();
User user = result.user;
return _userFromFirebaseUser(user);
} catch (e) {
print(e.toString());
return null;
}
}
//sign in with passwort and email
Future signIN(String email, String password) async {
try {
//if (FirebaseAuth.instance.currentUser.emailVerified) {print('fuckyooooooo');
UserCredential result = await _auth.signInWithEmailAndPassword(
email: email.trim(), password: password);
User user = result.user;
return _userFromFirebaseUser(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 'Please verify you account and restart the App';
}
}
}
return null;
}
//register with passwort an email
Future signUp(String email, String password,) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
User user = result.user;
await user.sendEmailVerification();
return _userFromFirebaseUser(user);
//await DatbaseService(uid:user.uid).updateUserData('0','new crew member','100','dfdssf');
// return ;
//user.sendEmailVerification();
// ( await DatbaseService(uid:user).updateUserData('0','new crew member','100','dfdssf')).user.uid;;
} 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;
}
//resetpassword
Future sendPasswordResetEmail(String email) async {
try {
return await _auth.sendPasswordResetEmail(email: email);
} 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 signOut() async {
try {
return await _auth.signOut();
} catch (e) {
print(e.toString());
return null;
}
}
}
这是我未来的方法
Future<bool> isEmailVerified() async {
User user = await _auth.currentUser;
return user.isEmailVerified;
}
解决方案
看来您正在isEmailVerified
递归调用方法。这会导致应用程序崩溃(堆栈溢出错误)。提供方法定义isEmailVerified
推荐阅读
- python - 将二进制数据解析为多个 ctypes 结构
- java - 创建与 ArrayList 一起使用的冒泡排序方法时遇到问题
- git - Visual Studio - 解决方案目录外的源代码控制
- python - 内联表单集导致错误:“NoneType”对象没有属性“is_ajax”
- gephi - 如何在 Gephi 图上应用 METIS 分区
- swift - 如何在 swift 中将委托值添加到 tableview
- c# - 从 libgit2sharp 中的 git 配置中获取用户的身份/签名以进行提交
- python - 想要在第 3 列中识别具有相同值的行并将它们分组到输出中
- r - 过滤包含重要单核苷酸多态性的基因
- saml-2.0 - 单点注销如何与 OKTA(IDP)-Shibboleth(SP)-App 配合使用