firebase - Flutter Web/Firebase - 在浏览器中按回绕过验证过程
问题描述
当我的用户注册时,我将他们引导到一个页面,通知他们在继续之前需要验证他们的电子邮件:
这是我的验证屏幕代码:
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();
}
}
}
问题陈述:当我在我的 chrome 浏览器上按下后退箭头时:
我返回到我的主页,用户登录了我不想要的用户。我希望我的用户在能够继续之前验证他们的电子邮件。这是我在不验证电子邮件的情况下按下返回按钮后主页上的抽屉:
我使用提供者在我的应用程序周围传递我的用户对象。这是我的 main.dart:
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()),
),
);
}
然后我用户 Consumer 在我的主页上使用该提供程序:
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")));
},
);
},
);
}
}
谁能帮我解决我面临的问题?提前致谢。
解决方案
在主页上检查用户是否登录以及何时登录,检查他是否已验证电子邮件。如果他有,让他进来,否则给他一些信息。
推荐阅读
- react-native - 如何修复错误元素类型无效预期字符串?
- python - 渲染在 vtkCommand 中创建的演员(回调)
- ajax - 将 HTML 字符串传递给我的控制器操作方法
- bash - 如何使用tail和grep并获取具有结果的文件名
- javascript - 单选按钮值正在打印“on”而不是它持有的值
- c++ - 这是缓存线程安全的通用实现(c++)吗?
- java - 带有 ASM 的 JVM INVOKESPECIAL 私有构造函数
- visual-studio-code - VSCode:不在项目中的文件在单独的窗口中打开
- php - 如何仅将 WordPress 的“the_title”过滤器用于帖子类型中的主标题?
- sql-server - 根据序号插入数据