次世代デジタル基盤開発事業部の野口です。 本投稿は TECOTEC Advent Calendar 2022 の4日目の記事です。
業務でモバイルアプリを作成しておりますが、その際にcognitoを使用した認証の処理を行いました。 なので今回は簡単なログイン周りについて記述していきます。
Amazon Cognitoを準備
上記でcognitoのユーザプールを作成します。 1 点注意しないといけないのが、多要素認証の箇所のMFAの設定はオプションのMFAにする必要があります。
ユーザプールの「ユーザープール名」とアプリケーションの統合の下の「クライアントID」、リージョン(東京の場合はap-northeast-1)はflutterとcognitoのつなぎ込みの際に使用します。
ログイン機能の実装
flutterプロジェクトを作成します。
任意のフォルダ直下で flutter create <プロジェクト名>
を実行します。
以下のパッケージを追加します
flutter pub add amplify_auth_cognito flutter pub add amplify_authenticator flutter pub add amplify_flutter
Amplifyの設定ファイルamplifyconfiguration.dartを作成します。
PoolId
にユーザプールID、AppClientId
にクライアントID、 Region
サーバの場所情報を記載します。
lib/amplifyconfiguration.dart
const amplifyconfig = '''{ "auth": { "plugins": { "awsCognitoAuthPlugin": { "CognitoUserPool": { "Default": { "PoolId": "ap-northeast-1_cVyI3PGfg", "AppClientId": "27ptgssgmcvfg41lt5h43gmpjh", "Region": "ap-northeast-1" } }, "Auth": { "Default": { "authenticationFlowType": "USER_SRP_AUTH", "socialProviders": [], "usernameAttributes": [], "signupAttributes": [], "passwordProtectionSettings": { "passwordPolicyMinLength": 8, "passwordPolicyCharacters": [] } } } } } } }''';
ログイン機能作成
ログイン機能を作成していきます。
main.dartを変更して、認証画面が立ち上がるか確認します
Authenticator
のウィジェットがamplifyconfiguration.dart
の設定に合わせてログイン画面を作成してくれます。
サインインが成功したら、Authenticator
以下のウィジェットが表示されるようになります。
main.dart
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart'; import 'package:amplify_authenticator/amplify_authenticator.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter/material.dart'; import 'amplifyconfiguration.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override void initState() { super.initState(); _configureAmplify(); } void _configureAmplify() async { try { await Amplify.addPlugin(AmplifyAuthCognito()); await Amplify.configure(amplifyconfig); print('Successfully configured'); } on Exception catch (e) { print('Error configuring Amplify: $e'); } } Future<void> signOutCurrentUser() async { try { await Amplify.Auth.signOut(); } on AuthException catch (e) { print(e.message); } } @override Widget build(BuildContext context) { return Authenticator( child: MaterialApp( builder: Authenticator.builder(), home: Scaffold( appBar: AppBar(title: const Text('ホーム')), body: Center( child: Column( children: [ const Text('ログイン成功!', style: TextStyle(fontSize: 32.0)), ElevatedButton( onPressed: () async{ await signOutCurrentUser(); }, child: const Text('ログアウト')), ], ), ), ), ), ); } }
立ち上がりました。 サインアップなどをしてユーザープールにユーザが登録されればログイン機能完成です。 かなりサクッと作成できました!!!!
cognitoにはamplifyのAPIを使用して独自の画面に認証機能をつけることもできます。 メールアドレスやパスワードの変更もできるのぜひ試してみてください。