颤振Web/Firebase-在浏览器中按回将绕过验证过程
当我的用户注册时,我会引导他们进入一个页面,通知他们在继续之前需要验证他们的电子邮件: 这是我的验证屏幕代码:颤振Web/Firebase-在浏览器中按回将绕过验证过程,firebase,flutter,dart,web,firebase-authentication,Firebase,Flutter,Dart,Web,Firebase Authentication,当我的用户注册时,我会引导他们进入一个页面,通知他们在继续之前需要验证他们的电子邮件: 这是我的验证屏幕代码: class VerifyScreen extends StatefulWidget { @override _VerifyScreenState createState() => _VerifyScreenState(); } class _VerifyScreenState extends State<VerifyScreen> { final
class VerifyScreen extends StatefulWidget {
@override
_VerifyScreenState createState() => _VerifyScreenState();
}
class _VerifyScreenState extends State<VerifyScreen> {
final auth = FirebaseAuth.instance;
User user;
Timer timer;
@override
void initState() {
user = auth.currentUser;
user.sendEmailVerification();
timer = Timer.periodic(
Duration(seconds: 5),
(timer) {
checkEmailVerified();
},
);
super.initState();
}
@override
void dispose() {
timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.8,
width: MediaQuery.of(context).size.width * 0.8,
child: Text(
"An email has been sent to ${user.email} please verify before proceeding"),
),
),
);
}
Future<void> checkEmailVerified() async {
user = auth.currentUser;
await user.reload();
if (user.emailVerified) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => OurHomePage(),
),
);
timer.cancel();
}
}
}
class VerifyScreen扩展StatefulWidget{
@凌驾
_VerifyScreenState createState()=>VerifyScreenState();
}
类_VerifyScreenState扩展状态{
final auth=FirebaseAuth.instance;
用户;
定时器;
@凌驾
void initState(){
user=auth.currentUser;
user.sendEmailVerification();
定时器=定时器。周期性(
持续时间(秒:5),
(计时器){
checkEmailVerified();
},
);
super.initState();
}
@凌驾
无效处置(){
timer.cancel();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:容器(
高度:MediaQuery.of(上下文).size.height*0.8,
宽度:MediaQuery.of(context).size.width*0.8,
子:文本(
“已将电子邮件发送到${user.email}请在继续之前进行验证”),
),
),
);
}
将来的checkEmailVerified()异步{
user=auth.currentUser;
等待user.reload();
if(user.emailVerified){
导航器.of(上下文).pushReplacement(
材料路线(
生成器:(上下文)=>OurHomePage(),
),
);
timer.cancel();
}
}
}
问题陈述:当我按下chrome浏览器上的后退箭头时:
我将返回到我的主页,用户已登录,但我不想登录。我希望我的用户在能够继续之前验证他们的电子邮件。这是我在未验证电子邮件的情况下按下后退按钮后主页上的抽屉:
我使用提供商在我的应用程序周围传递我的用户对象。这是我的主要任务。省道:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
MultiProvider(
providers: [
Provider(
create: (_) => FirebaseAuthService(),
),
StreamProvider<OurUser>(
create: (context) =>
context.read<FirebaseAuthService>().onAuthStateChanged),
],
child: MaterialApp(theme: OurTheme().buildTheme(), home: OurHomePage()),
),
);
}
void main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
runApp(
多供应商(
供应商:[
提供者(
创建:()=>FirebaseAuthService(),
),
流提供者(
创建:(上下文)=>
context.read().onAuthStateChanged),
],
孩子:MaterialApp(主题:OurTheme().buildTheme(),主页:OurHomePage()),
),
);
}
然后,我使用用户消费者在我的主页上使用该提供商:
class OurHomePage extends StatefulWidget {
@override
_OurHomePageState createState() => _OurHomePageState();
}
class _OurHomePageState extends State<OurHomePage> {
@override
Widget build(BuildContext context) {
return Consumer<OurUser>(
builder: (_, user, __) {
return ChangeNotifierProvider<SignInViewModel>(
create: (_) => SignInViewModel(context.read),
builder: (_, child) {
return Scaffold(appBar: AppBar(title: Text("My Homepage")));
},
);
},
);
}
}
class-OurHomePage扩展StatefulWidget{
@凌驾
_OurHomePageState createState()=>\u OurHomePageState();
}
类_OurHomePageState扩展了状态{
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(uu,用户,uu){
返回ChangeNotifierProvider(
创建:()=>SignenViewModel(context.read),
建筑商:(u,孩子){
返回脚手架(appBar:appBar(标题:文本(“我的主页”));
},
);
},
);
}
}
有人能帮我解决我面临的问题吗?提前感谢。在主页上检查用户是否已登录,何时登录,检查他是否已验证电子邮件。如果他有,让他进来,否则给他一些信息