颤振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(标题:文本(“我的主页”));
},
);
},
);
}
}

有人能帮我解决我面临的问题吗?提前感谢。

在主页上检查用户是否已登录,何时登录,检查他是否已验证电子邮件。如果他有,让他进来,否则给他一些信息