我正在努力与我的扑动应用程序的电子邮件验证。当我试图实现的功能,即使用户没有验证他的帐户,他能够使用他的帐户没有问题。我该怎么做才能让用户在没有点击确认链接的情况下无法访问应用程序,这样人们就无法使用他们无权访问的电子邮件?下面是代码
//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;
}
}
}
这是主要的。飞镖文件:
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();
}
}
}
电子邮件验证与帐户创建本身无关,而不是验证用户是否为垃圾邮件用户。你可以检查用户是否验证了他的电子邮件,如FirebaseAuth.instance.currentUser.emailVerified
,这返回一个bool
,然后你可以相应地计划你的应用程序流程。
您创建的用户是正确的。您将需要在您的安全规则和ui中要求emailVerified。
然后使用该电子邮件创建的用户的问题:创建一个云函数,该函数以一定的时间间隔评估您的用户以检查emailVerified。在你决定的任何年龄,删除用户。
你在这里做不了什么。垃圾邮件过滤器的电子邮件验证是如此参差不齐,电话号码是短暂的,足以造成问题。我正试图完全摆脱电子邮件、电子邮件/密码,只需要谷歌和苹果的登录,这提供了一个验证的电子邮件。