dart 验证邮件后自动将用户发送到主页- Flutter-Firebase

ffvjumwh  于 2024-01-04  发布在  Flutter
关注(0)|答案(3)|浏览(291)

在我的应用程序中,用户注册后,他们会收到一封验证电子邮件。一旦他们验证了电子邮件并返回应用程序,我希望他们自动转到主页,而无需单击任何内容或重新启动应用程序。如何实现这一点?
使用authStateChanges

  1. StreamBuilder(
  2. stream: FirebaseAuth.instance.authStateChanges(),

字符串
但没有用

oogrdqng

oogrdqng1#

在这里你可以试试这个:
1.Firebase Auth监听:在Flutter应用中设置一个身份验证状态监听器。该监听器应在“验证您的电子邮件”页面处于活动状态。
1.检查邮件验证状态:在监听器中,检查用户的邮件是否通过验证,可以通过检查Firebase用户对象的emailVerified属性来完成。
1.重定向到主页:如果emailVerified属性为true,则使用Flutter的导航器将用户重定向到主页。此重定向应自动进行,无需任何用户交互。
下面是执行此操作的代码片段:

  1. FirebaseAuth.instance
  2. .authStateChanges()
  3. .listen((User user) {
  4. if (user != null && user.emailVerified) {
  5. // Redirect to the homepage
  6. Navigator.pushReplacementNamed(context, '/homepage');
  7. }
  8. });

字符串
它监听身份验证状态的变化。当用户的电子邮件通过验证时,它会自动导航到主页。我希望它能正常工作。😁

展开查看全部
uqzxnwby

uqzxnwby2#

此代码将向用户的电子邮件地址发送验证电子邮件。电子邮件将包含用户必须单击以验证其电子邮件地址的链接。

  1. Future<void> sendVerificationEmail() async {
  2. final user = FirebaseAuth.instance.currentUser!;
  3. await user.sendEmailVerification();
  4. }

字符串
此代码将自动重定向到电子邮件验证后的网页.

  1. Future<void> verifyEmail(BuildContext context) async {
  2. final user = await FirebaseAuth.instance.currentUser!;
  3. user.reload();
  4. if (user.emailVerified) {
  5. // Navigate to the homepage
  6. Navigator.pushReplacement(
  7. context,
  8. MaterialPageRoute(builder: (context) => HomePage()),
  9. );
  10. }
  11. }
  12. }

展开查看全部
jfgube3f

jfgube3f3#

下面是逻辑代码或更短的代码:

  1. import 'package:firebase_auth/firebase_auth.dart';
  2. final FirebaseAuth _auth = FirebaseAuth.instance;
  3. return StreamBuilder(
  4. stream: _auth.authStateChanges(),
  5. builder: (context, snapshot) {
  6. if (snapshot.connectionState == ConnectionState.active) {
  7. User? user = snapshot.data as User?;
  8. if (user == null) {
  9. // User is not signed in
  10. return SignInScreen();
  11. } else {
  12. // Check if the user's email is verified
  13. if (user.emailVerified) {
  14. // User is signed in and email is verified, navigate to the homepage
  15. return HomeScreen();
  16. } else {
  17. // User is signed in but email is not verified, show verification screen
  18. return VerifyEmailScreen();
  19. }
  20. }
  21. }
  22. return CircularProgressIndicator();
  23. },
  24. );

字符串
下面是完整的代码:

  1. import 'package:flutter/material.dart';
  2. import 'package:firebase_auth/firebase_auth.dart';
  3. void main() {
  4. runApp(MyApp());
  5. }
  6. class MyApp extends StatelessWidget {
  7. @override
  8. Widget build(BuildContext context) {
  9. return MaterialApp(
  10. home: AuthenticationWrapper(),
  11. );
  12. }
  13. }
  14. class AuthenticationWrapper extends StatefulWidget {
  15. @override
  16. _AuthenticationWrapperState createState() => _AuthenticationWrapperState();
  17. }
  18. class _AuthenticationWrapperState extends State<AuthenticationWrapper> {
  19. final FirebaseAuth _auth = FirebaseAuth.instance;
  20. @override
  21. Widget build(BuildContext context) {
  22. return StreamBuilder(
  23. stream: _auth.authStateChanges(),
  24. builder: (context, snapshot) {
  25. if (snapshot.connectionState == ConnectionState.active) {
  26. User? user = snapshot.data as User?;
  27. if (user == null) {
  28. // User is not signed in
  29. return SignInScreen();
  30. } else {
  31. // Check if the user's email is verified
  32. if (user.emailVerified) {
  33. // User is signed in and email is verified, navigate to the homepage
  34. return HomeScreen();
  35. } else {
  36. // User is signed in but email is not verified, show verification screen
  37. return VerifyEmailScreen();
  38. }
  39. }
  40. }
  41. return CircularProgressIndicator();
  42. },
  43. );
  44. }
  45. }
  46. class SignInScreen extends StatelessWidget {
  47. @override
  48. Widget build(BuildContext context) {
  49. return Scaffold(
  50. appBar: AppBar(
  51. title: Text("Sign In"),
  52. ),
  53. body: Center(
  54. child: ElevatedButton(
  55. onPressed: () async {
  56. // Perform sign-in logic here
  57. },
  58. child: Text("Sign In"),
  59. ),
  60. ),
  61. );
  62. }
  63. }
  64. class HomeScreen extends StatelessWidget {
  65. @override
  66. Widget build(BuildContext context) {
  67. return Scaffold(
  68. appBar: AppBar(
  69. title: Text("Home"),
  70. ),
  71. body: Center(
  72. child: Text("Welcome to the homepage!"),
  73. ),
  74. );
  75. }
  76. }
  77. class VerifyEmailScreen extends StatelessWidget {
  78. @override
  79. Widget build(BuildContext context) {
  80. return Scaffold(
  81. appBar: AppBar(
  82. title: Text("Verify Email"),
  83. ),
  84. body: Center(
  85. child: Column(
  86. mainAxisAlignment: MainAxisAlignment.center,
  87. children: [
  88. Text("Please verify your email to access the homepage."),
  89. ElevatedButton(
  90. onPressed: () async {
  91. // Send email verification link
  92. User? user = FirebaseAuth.instance.currentUser;
  93. await user?.sendEmailVerification();
  94. },
  95. child: Text("Resend Verification Email"),
  96. ),
  97. ],
  98. ),
  99. ),
  100. );
  101. }
  102. }

展开查看全部

相关问题