【Flutter/FirebaseAuth】メールとパスワードによるユーザー登録

今回はFirebaseAuthを使ってメールとパスワードでユーザー登録する方法を紹介します。

既にFlutterプロジェクトにfirebase_corefirebase_authを導入済み、Firebase.initializeApp()の呼び出しが完了している程で解説していきます。

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

目次

メール/パスワードによる登録・サインインを有効化

FlutterでAuthenticationを使用しメール/パスワードによるユーザー登録するにはまずFirebaseプロジェクトを開き、プロバイダを追加します。

「Authentication」>「ネイティブのプロバイダ」>「メール/パスワード」をクリック。

「有効にする」をオンにして保存します。

これで「メール/パスワード」による登録が可能になりました。

次に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 Up'),
            onPressed: (){},
          )
        ],
      ),
    );
  }
}

メールとパスワードによるユーザー登録

ElevatedButton(
  child: Text('Sign Up'),
  onPressed: () async {
    try {
      await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: _emailController.text.trim(),
        password: _passwordController.text.trim(),
      );

      const snackBar = SnackBar(
        content: Text('Success!'),
      );
      ScaffoldMessenger.of(context).showSnackBar(snackBar);

    } catch (e) {
      print(e);
    }
  },
)

createUserWithEmailAndPasswordメソッドでメールとパスワードによるユーザー登録ができます。

emailpasswordの引数にはそれぞれ登録用「メールアドレス」と「パスワード」を渡します。メールアドレスの重複やパスワードの強弱性が問題で登録できなかった場合のために「try-catch文」を使用するようにします。

上記コードでは登録が完了したらSnackBarで「Success!」と表示されます。

ユーザー入力登録できた場合

ユーザーが入力したメールアドレスとパスワードに問題がなければSnackBarが表示され、Firebaseプロジェクトの「Authentication」>「Users」にユーザーが登録されます。

サンプルコード

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 Up'),
            onPressed: () async {
              try {
                await FirebaseAuth.instance.createUserWithEmailAndPassword(
                  email: _emailController.text.trim(),
                  password: _passwordController.text.trim(),
                );

                const snackBar = SnackBar(
                  content: Text('Success!'),
                );
                ScaffoldMessenger.of(context).showSnackBar(snackBar);
              } catch (e) {
                print(e);
              }
            },
          )
        ],
      ),
    );
  }
}

一緒に読みたい

参考

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