1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutter✕Firebase(Authentication編)

Last updated at Posted at 2020-12-20

:book: Flutterの記事を整理し本にしました :book:

  • 本稿の記事を含む様々な記事を体系的に整理し本にまとめました
  • 今後はこちらを最新化するため、最新情報はこちらをご確認くださ
  • 10万文字を超える超大作になっています(笑)

はじめに

概要

  • FlutterとFirebaseのAuthenticationを使って、認証機構を実装します
  • メールとパスワードによる認証を作り、パスワードの再設定も実装します

対象読者

  • FlutterでFirebase(mBaaS)によるサーバ認証を行ってみたい人

関連記事

スタート(前提条件)

  • flutterの基本概念を理解されているとより理解できると思います。
  • Firebaseをflutterで使えるようになるまでの初期設定は省略します。

ゴール(達成できること)

  • flutter✕FirebaseのAuthenticationで認証ができるようになります

スコープ外(ふれないもの)

  • 認証方式はメール&パスワード方式のみとし、Google,Github,Lineなどのソーシャルアカウント認証については触れません

開発環境

  • flutterWebを用いているため、現時点でbetaのチャンネルを使っています
.sh
% flutter --version
Flutter 1.25.0-8.1.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 8f89f6505b (5 days ago) • 2020-12-15 15:07:52 -0800
Engine • revision 92ae191c17
Tools • Dart 2.12.0 (build 2.12.0-133.2.beta)

本編

全体像/結論

  • FirebaseのAuthenticationを設定し、flutterから呼び出すことで実現できます

実装例

ソースコードなど

pubspec.yml
# 依存関係を記述しておきます
firebase_core: ^0.5.3
firebase_auth: ^0.18.0
  • 今回はWeb版で利用するため、index.htmlのjsについても読み込んでおきます
index.html
<script src="https://www.gstatic.com/firebasejs/8.2.0/firebase-auth.js"></script>
  • dartのソースコード(抜粋)
login.dart
// パッケージのimport
import 'package:firebase_auth/firebase_auth.dart';

// 登録
final User user = (await FirebaseAuth.instance.createUserWithEmailAndPassword(
  email: email, password: password)).user;

// ログイン
User user = (await FirebaseAuth.instance.signInWithEmailAndPassword(
  email: email,password: password)).user;

// パスワードリセット
await FirebaseAuth.instance.sendPasswordResetEmail(email: email);

// 例外処理(すでに登録済、フォーマットエラー、パスワードが短すぎなど)
// 例外のメッセージを少し加工して、flushbarで表示しています
Flushbar(
  message:e.toString().replaceAll(RegExp(r'\[.*\] '), ''),
  flushbarPosition: FlushbarPosition.TOP,
  backgroundColor: Colors.deepOrangeAccent,
  margin: EdgeInsets.all(8),
  borderRadius: 8,
  duration: Duration(seconds: 5),
)..show(context);

動作イメージ

  • AuthenticationのSign in methodのメール/パスワードを有効にする
    pic2_1.png

  • 有効化と上述のソースコードの登録の部分を実行するとレコードが増える
    pic2_2.png

  • パスワードリセットメールは、templateのパスワード再設からテンプレートが作れる
    pic2_3.png

  • メソッドが呼び出されると、メールサーバなどを設定していなくてもメールが飛ぶ

  • 本文中のリンクを踏んで、新しいパスワードを設定すると反映される
    pic2_4.png


補足

備考

  • Google認証なども実現したかったのですが、証明書やフィンガープリントなどが少し手間だったのでまだ実現していません
  • PWを自分で保持しないので、セキュリティ上も良いですね

参考文献

追記

  • 2020/12/21 初稿
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?