【Flutter/FirebaseAuth】メールとパスワードによるログイン

今回はFirebaseAuthでメールとパスワードによるログイン機能をFlutterで実装します。

分かりやすく解説するためFirebaseAuthにユーザーを手動登録(メールとパスワードによる登録)し、ログイン機能のみ紹介します。ユーザー登録から知りたい方はこちらの解説記事は先にお読みください。

\ 世界最大級のオンライン学習サービス /

目次

手動でユーザー登録(テスト開発のため)

Firebaseプロジェクトを開き「Authentication」>「Users」>「ユーザーを追加」をクリック。

ユーザーのメールアドレスとパスワードを入力し「ユーザーを追加」をクリック。

これで手動によるユーザー登録が完了しました。

次にFlutterでログイン機能を作り、手動登録した「メールアドレス」と「パスワード」でログインを試みます。

準備コード

これからElevatedButtonが押されたらTextFieldで入力したメールとパスワードでログインする機能を実装します。

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlutterZero'),
        ),
        body: MyCustomApp(),
      ),
    );
  }
}

class MyCustomApp extends StatefulWidget {
  const MyCustomApp({Key? key}) : super(key: key);

  @override
  State<MyCustomApp> createState() => _MyCustomAppState();
}

class _MyCustomAppState extends State<MyCustomApp> {
  String? email;
  String? password;

  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(10.0),
      child: Column(
        children: [
          TextField(
            controller: _emailController,
            onChanged: (email) {
              this.email = email;
            },
            decoration: InputDecoration(hintText: 'Email'),
          ),
          TextField(
            controller: _passwordController,
            onChanged: (password) {
              this.password = password;
            },
            obscureText: true,
            decoration: InputDecoration(hintText: 'Password'),
          ),
          ElevatedButton(
            child: Text('Sign In'),
            onPressed: (){},
          )
        ],
      ),
    );
  }
}

メールとパスワードによるログイン

ElevatedButton(
  child: Text('Sign In'),
  onPressed: () async {
    try {
      await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: _emailController.text.trim(),
        password: _passwordController.text.trim(),
      );
      final user = FirebaseAuth.instance.currentUser!;

      final snackBar = SnackBar(
        content: Text(user.email!),
      );

      ScaffoldMessenger.of(context).showSnackBar(snackBar);
    } catch (e) {
      print(e);
    }
  },
)

signInWithEmailAndPasswordメソッドでメールとパスワードによるログインができます。

emailpasswordの引数にはそれぞれ「メールアドレス」と「パスワード」を渡します。ログインに失敗した場合のために「try-catch文」を使用するようにします。

上記コードでは登録が完了したらSnackBarでユーザーの登録メールアドレスが表示されます。

一緒に読みたい

参考

  • URLをコピーしました!
目次