본문 바로가기
Flutter/Package

플러터에서 local_auth 패키지사용하여 지문인식을 사용한 로그인 구현

by Maccrey Coding 2024. 7. 18.
728x90
반응형

 

안녕하세요! 오늘은 Flutter에서 지문인식을 사용한 로그인 기능을 구현하는 방법에 대해 알아보겠습니다.

지문인식은 사용자 인증의 보안성을 높일 수 있는 편리한 방법이며, Flutter에서는 local_auth 패키지을 사용하여 쉽게 구현할 수 있습니다.

 

1. local_auth 패키지 설치

 

먼저, 프로젝트에 local_auth 패키지을 설치해야 합니다.

다음 명령어를 사용하여 설치할 수 있습니다.

flutter pub add local_auth

 

2. 지문인식 사용 가능 여부 확인

 

지문인식 기능을 사용하기 전에 사용자 기기에 지문인식 기능이 있는지 확인해야 합니다.

다음 코드를 사용하여 확인할 수 있습니다.

 

import 'package:local_auth/local_auth.dart';

void _checkBiometricAvailability() async {
  final localAuth = LocalAuth();
  final hasBiometric = await localAuth.hasBiometricSupport();
  final biometrics = await localAuth.getAvailableBiometrics();

  if (hasBiometric) {
    print('지문인식 지원 기기입니다.');
    print('사용 가능한 생체 인증 방식: ${biometrics.join(', ')}');
  } else {
    print('지문인식 지원하지 않는 기기입니다.');
  }
}
 

3. 지문인식 인증 요청

 

사용자에게 지문인식 인증을 요청하려면 다음 코드를 사용할 수 있습니다.

Future<void> _authenticateWithBiometrics() async {
  final localAuth = LocalAuth();
  final canAuthenticate = await localAuth.canAuthenticateWithBiometrics();

  if (canAuthenticate) {
    final supportedBiometrics = await localAuth.getAvailableBiometrics();
    final authenticationDescription = AuthenticationDescription(
      keyName: '로그인',
      localizedDescription: '앱 로그인을 위해 지문을 인증해주세요.',
      cancelDescription: '취소',
      authenticationModes: supportedBiometrics,
    );

    try {
      final authenticationResult = await localAuth.authenticateWithBiometrics(
        authenticationDescription,
      );

      if (authenticationResult.didAuthenticate) {
        print('지문인식 인증 성공!');
        // 로그인 처리
      } else {
        print('지문인식 인증 실패.');
      }
    } on PlatformException catch (e) {
      print('지문인식 인증 오류: ${e.message}');
    }
  } else {
    print('지문인식 인증 불가능.');
  }
}
 

4. 로그인 화면 구현

 

위 코드를 기반으로 로그인 화면을 구현할 수 있습니다. 로그인 버튼을 누르면 지문인식 사용 가능 여부를 확인하고, 사용 가능하면 지문인식 인증을 요청합니다.

지문인식 인증 성공 시 로그인 처리를 진행하고, 실패 시 사용자에게 알려줍니다.

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final LocalAuth _localAuth = LocalAuth();

  void _loginWithBiometrics() async {
    await _authenticateWithBiometrics();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('로그인'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _loginWithBiometrics,
              child: Text('지문인식으로 로그인'),
            ),
          ],
        ),
      ),
    );
  }
}
 

5. 보안 고려 사항

  • 지문 데이터 보호: 지문 데이터는 사용자 기기 내부에 안전하게 저장되어야 합니다. 앱에서 지문 데이터를 직접 저장하거나 전송하지 않도록 주의해야 합니다.
  • 인증 실패 처리: 지문인식 인증이 실패할 경우 사용자에게 적절한 메시지를 표시하고, 지속적인 시도를 제한하는 등의 조치를 취해야 합니다.
  • 앱 업데이트: 앱 업데이트 시 지문인식 인증을 다시 요청하는 것이 좋습니다.

6. 추가 기능

 

지문인식 로그인 기능에 다음과 같은 추가 기능을 구현할 수 있습니다.

  • 생체 인증 유형 선택: 사용자가 사용 가능한 생체 인증 유형(예: 지문, 얼굴 인식) 중 원하는 유형을 선택할 수 있도록 합니다.
  • 생체 인증 등록: 사용자가 자신의 지문이나 얼굴을 앱에 등록할 수 있도록 합니다.
  • 생체 인증 삭제: 사용자가 등록된 생체 인증 정보를 삭제할 수 있도록 합니다.

7. 예시 코드

다음은 Flutter에서 지문인식을 사용한 로그인을 구현하는 예시 코드입니다.

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final LocalAuth _localAuth = LocalAuth();

  void _loginWithBiometrics() async {
    final canAuthenticate = await _localAuth.canAuthenticateWithBiometrics();

    if (canAuthenticate) {
      final supportedBiometrics = await _localAuth.getAvailableBiometrics();
      final authenticationDescription = AuthenticationDescription(
        keyName: '로그인',
        localizedDescription: '앱 로그인을 위해 지문을 인증해주세요.',
        cancelDescription: '취소',
        authenticationModes: supportedBiometrics,
      );

      try {
        final authenticationResult = await _localAuth.authenticateWithBiometrics(
          authenticationDescription,
        );

        if (authenticationResult.didAuthenticate) {
          print('지문인식 인증 성공!');
          // 로그인 처리
        } else {
          print('지문인식 인증 실패.');
        }
      } on PlatformException catch (e) {
        print('지문인식 인증 오류: ${e.message}');
      }
    } else {
      print('지문인식 인증 불가능.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('로그인'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _loginWithBiometrics,
              child: Text('지문인식으로 로그인'),
            ),
          ],
        ),
      ),
    );
  }
}
 

 

 

Flutter에서 지문인식을 사용한 로그인 기능을 구현하는 방법에 대해 알아보았습니다. 

local_auth 패키지을 사용하면 쉽게 지문인식 로그인 기능을 구현할 수 있으며, 보안 고려 사항을 염두에 두어 안전하게 구현하는 것이 중요합니다.

지문인식 로그인 기능은 사용자 경험을 향상시키고 앱 보안을 강화하는 데 도움이 될 수 있습니다.

Flutter에서 지문인식 로그인 기능을 구현하여 앱의 완성도를 높여보세요!

728x90
반응형