AWS Amplify 및 Flutter를 사용하여 로그인 기능 구축



AWS Amplify와 Flutter로 로그인 기능을 구축했습니다 🎉



AWS Amplify , Amplify UI Components' amplify_authenticator , Flutter 을 사용하여 로그인 기능을 만들었습니다!

사전 준비


  • Flutter 환경 준비
  • Flutter #001 - Installation
  • 플러터 v2.8.0
  • 다트 v2.15.0
  • Xcode v13.1
  • 안드로이드 SDK v32.0.0
  • 안드로이드 스튜디오 v2020.3
  • 비주얼 스튜디오 코드 v1.63.0
  • Flutter 확장 v3.29.0

  • AWS Amplify 환경 준비
  • AWS Amplify #001 - Installation
  • 노드 v16.10.0
  • npm v7.24.0



  • Flutter 프로젝트 만들기



    먼저 Flutter 프로젝트를 만들어야 합니다.
    Flutter #002 - Building the Environment

    flutter create amplify_app
    




    이것으로 Flutter 프로젝트 생성이 완료되었습니다.

    AWS Amplify 설정



    다음 단계는 Flutter용 AWS Amplify를 구성하고 인증 기능을 추가하는 것입니다.

    Flutter용 AWS Amplify 구성
    AWS Amplify #006 - Building the environment [Flutter version]

    amplify init
    






    인증 추가
    AWS Amplify #003 - Add Authentication

    amplify add auth
    




    amplify push
    




    이것으로 AWS Amplify 설정이 완료됩니다.

    Flutter 설정하기



    마지막으로 로그인 기능에 대한 실제 코드를 작성합니다.

    전체 구성





    pubspec.yaml




    name: amplify_app
    description: A new Flutter project.
    
    publish_to: 'none'
    
    version: 1.0.0+1
    
    environment:
        sdk: '>=2.15.0 <3.0.0'
    
    dependencies:
        flutter:
            sdk: flutter
    
        cupertino_icons: ^1.0.2
    
        amplify_auth_cognito: ^0.3.0-0
        amplify_authenticator: ^0.1.0-0
        amplify_flutter: ^0.3.0-0
    
    dev_dependencies:
        flutter_test:
            sdk: flutter
    
        flutter_lints: ^1.0.0
    
    flutter:
        uses-material-design: true
    



    "amplify_authenticator"과 관련된 Amplify UI 구성 요소 패키지를 설치합니다.

    amplify_auth_cognito: ^0.3.0-0
    amplify_authenticator: ^0.1.0-0
    amplify_flutter: ^0.3.0-0
    



    /lib

    메인 다트




    import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
    import 'package:amplify_authenticator/amplify_authenticator.dart';
    import 'package:amplify_flutter/amplify.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
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      @override
      void initState() {
        super.initState();
        _configureAmplify();
      }
    
      Future<void> _configureAmplify() async {
        try {
          await Amplify.addPlugin(AmplifyAuthCognito());
          await Amplify.configure(amplifyconfig);
        } on Exception catch (e) {
          print('Could not configure Amplify: $e');
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData.light(),
          darkTheme: ThemeData.dark(),
          home: Authenticator(
            child: const LoggedInScreen(),
          ),
        );
      }
    }
    
    class LoggedInScreen extends StatelessWidget {
      const LoggedInScreen({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              children: const [
                Text('Logged In'),
                SignOutButton(),
              ],
            ),
          ),
        );
      }
    }
    



    AWS Amplify 관련 항목을 로드합니다.

    import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
    import 'package:amplify_authenticator/amplify_authenticator.dart';
    import 'package:amplify_flutter/amplify.dart';
    import 'amplifyconfiguration.dart';
    



    AWS Amplify 인증을 설정합니다.

      Future<void> _configureAmplify() async {
        try {
          await Amplify.addPlugin(AmplifyAuthCognito());
          await Amplify.configure(amplifyconfig);
        } on Exception catch (e) {
          print('Could not configure Amplify: $e');
        }
      }
    



    UI 구성 요소를 구성합니다.

      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData.light(),
          darkTheme: ThemeData.dark(),
          home: Authenticator(
            child: const LoggedInScreen(),
          ),
        );
      }
    



    로그인 후 화면을 구성합니다.

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              children: const [
                Text('Logged In'),
                SignOutButton(),
              ],
            ),
          ),
        );
      }
    



    /안드로이드/앱

    build.gradle




    def localProperties = new Properties()
    def localPropertiesFile = rootProject.file('local.properties')
    if (localPropertiesFile.exists()) {
        localPropertiesFile.withReader('UTF-8') { reader ->
            localProperties.load(reader)
        }
    }
    
    def flutterRoot = localProperties.getProperty('flutter.sdk')
    if (flutterRoot == null) {
        throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
    }
    
    def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
    if (flutterVersionCode == null) {
        flutterVersionCode = '1'
    }
    
    def flutterVersionName = localProperties.getProperty('flutter.versionName')
    if (flutterVersionName == null) {
        flutterVersionName = '1.0'
    }
    
    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    
    android {
        compileSdkVersion flutter.compileSdkVersion
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        kotlinOptions {
            jvmTarget = '1.8'
        }
    
        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
        }
    
        defaultConfig {
            // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
            applicationId "com.example.amplify_app"
            minSdkVersion 21
            targetSdkVersion flutter.targetSdkVersion
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
    
        buildTypes {
            release {
                // TODO: Add your own signing config for the release build.
                // Signing with the debug keys for now, so `flutter run --release` works.
                signingConfig signingConfigs.debug
            }
        }
    }
    
    flutter {
        source '../..'
    }
    
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }
    



    Android에서 amplify_authenticator를 표시하려면 Android SDK 버전을 지정해야 하므로 고정 "minSdkVersion"을 선택합니다.

        defaultConfig {
            // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
            applicationId "com.example.amplify_app"
            minSdkVersion 21
            targetSdkVersion flutter.targetSdkVersion
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
    



    Visual Studio Code에서 "실행 및 디버그"를 실행하고 사용자 등록 후 로그인합니다.



    사용자가 AWS 콘솔에 등록되어 있는지 확인합니다.



    AWS Amplify와 Flutter로 로그인 기능을 구축할 수 있었습니다 👍



    Flutter에서 로그인 기능을 구현하고 싶다면 Firebase를 자주 사용하지만 AWS Amplify로 구현이 가능한 것을 확인할 수 있었습니다 💡

    좋은 웹페이지 즐겨찾기