Firebase auth 邮件验证是没用的,因为用户即使不点击确认链接也可以访问应用
Posted
技术标签:
【中文标题】Firebase auth 邮件验证是没用的,因为用户即使不点击确认链接也可以访问应用【英文标题】:Firebase auth email verification is useless because the user can access the app even if he doesn't click the confirmation link 【发布时间】:2021-11-01 03:14:16 【问题描述】:我正在为我的颤振应用程序上的电子邮件验证而苦苦挣扎。当我尝试实现该功能时,即使用户没有验证他的帐户,他也可以毫无问题地使用他的帐户。我该怎么做才能使用户在未单击确认链接时无法访问该应用程序,从而使人们无法使用他们无权访问的电子邮件?这是代码
//On this file, I store all the login and sign in functionalities:
class AuthService
final FirebaseAuth _auth = FirebaseAuth.instance;
final googleSignIn = GoogleSignIn();
GoogleSignInAccount? _user;
// create user object based on firebase user
Users? _userFromFirebaseUser(User? user)
return user != null ? Users(uid: user.uid) : null;
// auth change user stream
Stream<Users?> get user
return _auth.authStateChanges().map(_userFromFirebaseUser);
//register with email & psswrd
Future registerWithEmailAndPassword(String email, String password) async
try
UserCredential result = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
User? user = result.user;
return _userFromFirebaseUser(user);
catch (e)
print(e.toString());
return null;
//sign out
Future signOut() async
try
return await _auth.signOut();
catch (e)
print(e.toString());
return null;
这是 main.dart 文件:
void main() async
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
class MyApp extends StatelessWidget
// This widget is the root of your application.
@override
Widget build(BuildContext context)
return StreamProvider<Users?>.value(
initialData: null,
value: AuthService().user,
child: MaterialApp(
home: Wrapper(),
),
);
包装文件引导至认证页面或主页:
class Wrapper extends StatelessWidget
const Wrapper(Key? key) : super(key: key);
@override
Widget build(BuildContext context)
final user = Provider.of<Users?>(context);
//return either home or authenticate
if (user == null)
return Authenticate();
else
return Home();
【问题讨论】:
【参考方案1】:电子邮件验证与帐户创建本身无关,而不是验证用户不是垃圾邮件用户。您可以检查用户的电子邮件是否已像 FirebaseAuth.instance.currentUser.emailVerified
这样验证,这将返回 bool
,然后您可以相应地规划您的应用流程。
【讨论】:
问题是即使该邮箱的假用户无法访问该账户,该账户仍然存在。所以当真正的用户尝试注册时,他将无法注册,因为firebase已经注册了这个账号 我明白你的意思,在这里查看***.com/questions/64468970/…,接受的答案最有可能是你要找的。span>以上是关于Firebase auth 邮件验证是没用的,因为用户即使不点击确认链接也可以访问应用的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是否允许或禁止Facebook身份验证 - Firebase中的电子邮件
Firebase Auth - createUserWithEmailAndPassword() - 在验证电子邮件之前阻止登录