#【できていること】
FlutterでFirebaseに接続しAuthenticationを用いてログイン機能を実装しsendEmailVerification()メソッドを使用し確認メールを飛ばす
#【したいこと】
メール確認をしないとログインできないようにしたい。
#【質問】
確認メールがきてリンクをクリックしてメールアドレス確認をしてもemailVerified()の値がfalseのままです。
正直エラーも出ていないので何が間違っているかわかりませんよろしければぜひアドバイスお願いします。
#【実際のコード】
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; 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 MaterialApp( title: 'sample', theme: ThemeData( primaryColor: Color.fromRGBO(128, 128, 128, 1.0), secondaryHeaderColor: Color.fromRGBO(128, 128, 128, 1.0), colorScheme: ColorScheme.fromSwatch() .copyWith(secondary: Color.fromRGBO(250, 250, 250, 1.0))), home: MailScreen(), ); } } // 入力されたメールアドレス String newUserEmail = ""; // 入力されたパスワード String newUserPassword = ""; class MailScreen extends StatefulWidget { const MailScreen({Key? key}) : super(key: key); @override _MailScreenState createState() => _MailScreenState(); } class _MailScreenState extends State<MailScreen> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 0.0, backgroundColor: Colors.white10, automaticallyImplyLeading: false, ), body: Column(children: <Widget>[ Align( alignment: Alignment.topLeft, child: Text( "メールアドレス登録", style: TextStyle( fontSize: 25, fontWeight: FontWeight.w600, color: Colors.black54), )), SizedBox( height: (80.0), ), Row(children: <Widget>[ Expanded( flex: 3, child: TextFormField( // テキスト入力のラベルを設定 decoration: InputDecoration(labelText: "メールアドレス"), onChanged: (String value) { setState(() { newUserEmail = value; }); }, ), ), ]), Row(children: <Widget>[ Expanded( flex: 3, child: TextFormField( decoration: InputDecoration(labelText: "パスワード(6文字以上)"), obscureText: true, onChanged: (String value) { setState(() { newUserPassword = value; }); }, ), ), ]), SizedBox( height: 66, ), SizedBox( height: 50, width: 300, child: ElevatedButton( style: ElevatedButton.styleFrom( shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(30))), primary: Color.fromRGBO(128, 128, 128, 1.0), onPrimary: Colors.white, ), onPressed: () async { try { // メール/パスワードでユーザー登録 final FirebaseAuth auth = FirebaseAuth.instance; final UserCredential result = await auth.createUserWithEmailAndPassword( email: newUserEmail, password: newUserPassword, ); //メール確認コード送信 await FirebaseAuth.instance.currentUser! .sendEmailVerification(); print("成功"); Navigator.push( context, MaterialPageRoute(builder: (context) => EmailCheckScreen()), ); } catch (e) { // 登録に失敗した場合 print("アカウントあります"); } }, child: const Text('次へ'), ), ), ]), ); } } //メール確認画面 class EmailCheckScreen extends StatefulWidget { const EmailCheckScreen({Key? key}) : super(key: key); @override _EmailCheckScreenState createState() => _EmailCheckScreenState(); } class _EmailCheckScreenState extends State<EmailCheckScreen> { User? user = FirebaseAuth.instance.currentUser; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("サンプル"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ ElevatedButton( child: const Text('Button'), style: ElevatedButton.styleFrom( primary: Colors.orange, onPrimary: Colors.white, ), onPressed: () async { try { UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword( email: newUserEmail, password: newUserPassword, ); //中身確認 print(user?.emailVerified); if (user!.emailVerified) { Navigator.push( context, MaterialPageRoute( builder: (context) => Screen(), )); } else { print("失敗"); } } catch (e) { print('NG'); } }, ), ], ), ), ); } } class Screen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("gawa"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: const <Widget>[ Text( 'You have pushed the button this many times:', ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () {}, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。