Firebase에 앱 연결
아직 수행하지 않았으면 Flutter의 Firebase SDK를 설치하고 초기화합니다.
앱에 Firebase 인증 추가
Flutter 프로젝트 루트에서 다음 명령어를 실행하여 플러그인을 설치합니다.
flutter pub add firebase_auth
완료되면 Flutter 애플리케이션을 다시 빌드합니다.
flutter run
Dart 코드에서 플러그인을 가져옵니다.
import 'package:firebase_auth/firebase_auth.dart';
인증 제공업체를 사용하려면 Firebase Console에서 인증 제공업체를 사용 설정해야 합니다. Firebase 인증 섹션의 로그인 방법 페이지로 이동하여 이메일/비밀번호 로그인과 앱에 사용할 다른 ID 공급업체를 사용 설정합니다.
(선택사항) Firebase 로컬 에뮬레이터 도구 모음으로 프로토타입 제작 및 테스트
앱에서 사용자를 인증하는 방법을 설명하기 전에 인증 기능의 프로토타입을 제작하고 테스트하는 데 사용할 수 있는 도구 모음인 Firebase 로컬 에뮬레이터 도구 모음을 소개하겠습니다. 사용할 인증 기술과 제공업체를 결정하거나, 인증 및 Firebase 보안 규칙을 사용하는 공개 및 비공개 데이터가 포함된 다양한 데이터 모델을 사용해 보거나, 로그인 UI 디자인의 프로토타입을 제작하는 경우 라이브 서비스를 배포하지 않고 로컬에서 작업할 수 있다는 것은 획기적인 아이디어입니다.
인증 에뮬레이터는 로컬 에뮬레이터 도구 모음의 일부이며 앱에서 에뮬레이션된 데이터베이스 콘텐츠와 구성은 물론 필요에 따라 에뮬레이션된 프로젝트 리소스(함수, 기타 데이터베이스, 보안 규칙)와 상호작용할 수 있게 해줍니다.
인증 에뮬레이터를 사용하려면 다음 몇 단계만 거치면 됩니다.
에뮬레이터에 연결하려면 앱의 테스트 구성에 코드 줄을 추가합니다.
로컬 프로젝트 디렉터리의 루트에서
firebase emulators:start
를 실행합니다.대화형 프로토타입 제작에는 로컬 에뮬레이터 도구 모음 UI를, 비대화형 테스트에는 인증 에뮬레이터 REST API를 사용합니다.
useAuthEmulator()
를 호출하여 에뮬레이터 주소와 포트를 지정합니다.Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // Ideal time to initialize await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); //... }
자세한 안내는 인증 에뮬레이터에 앱 연결을 참조하세요. 자세한 내용은 로컬 에뮬레이터 도구 모음 소개를 참조하세요.
이제 사용자 인증 방법을 계속 살펴보겠습니다.
현재 인증 상태 확인
Firebase 인증은 신규 또는 기존 Flutter 애플리케이션에 보안 인증을 통합할 수 있는 다양한 방법과 유틸리티를 제공합니다. 대부분의 경우 사용자의 인증 상태(예: 로그인 또는 로그아웃)를 알아야 합니다.
Firebase 인증을 사용하면 Stream
을 통해 이 상태를 실시간으로 구독할 수 있습니다.
호출된 스트림은 사용자의 현재 인증 상태에 대한 즉각적인 이벤트를 제공한 다음 인증 상태가 변경될 때마다 후속 이벤트를 제공합니다.
인증 상태 변경사항을 수신 대기하는 방법에는 세 가지가 있습니다.
authStateChanges()
이러한 변경사항을 구독하려면 FirebaseAuth
인스턴스에서 authStateChanges()
메서드를 호출합니다.
FirebaseAuth.instance
.authStateChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
다음 상황이 발생하면 이벤트가 실행됩니다.
- 리스너가 등록된 직후
- 사용자가 로그인한 경우
- 현재 사용자가 로그아웃한 경우
idTokenChanges()
이러한 변경사항을 구독하려면 FirebaseAuth
인스턴스에서 idTokenChanges()
메서드를 호출합니다.
FirebaseAuth.instance
.idTokenChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
다음 상황이 발생하면 이벤트가 실행됩니다.
- 리스너가 등록된 직후
- 사용자가 로그인한 경우
- 현재 사용자가 로그아웃한 경우
- 현재 사용자의 토큰이 변경된 경우
userChanges()
이러한 변경사항을 구독하려면 FirebaseAuth
인스턴스에서 userChanges()
메서드를 호출합니다.
FirebaseAuth.instance
.userChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
다음 상황이 발생하면 이벤트가 실행됩니다.
- 리스너가 등록된 직후
- 사용자가 로그인한 경우
- 현재 사용자가 로그아웃한 경우
- 현재 사용자의 토큰이 변경된 경우
FirebaseAuth.instance.currentUser
에서 제공하는 다음 메서드가 호출되는 경우:reload()
unlink()
updateEmail()
updatePassword()
updatePhoneNumber()
updateProfile()
인증 상태 유지
모든 플랫폼용 Firebase SDK는 기본적으로 앱 다시 시작 또는 페이지 새로고침 후 사용자의 인증 상태가 유지되도록 지원합니다.
Android 및 iOS와 같은 네이티브 플랫폼에서는 이 동작의 설정을 변경할 수 없으며 앱을 다시 시작해도 사용자의 인증 상태가 기기에서 유지됩니다. 사용자는 기기 설정을 사용하여 캐시된 앱 데이터를 삭제할 수 있으며, 그러면 저장된 기존 상태가 완전 삭제됩니다.
웹 플랫폼에서 사용자의 인증 상태는 IndexedDB에 저장됩니다.
Persistence.LOCAL
를 사용하여 로컬 스토리지에 데이터를 저장하도록 지속성을 변경할 수 있습니다.
필요한 경우 이 기본 동작을 변경하여 현재 세션의 인증 상태만 유지하거나 아예 유지하지 않도록 할 수 있습니다. 이러한 설정을 구성하려면 다음 FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);
메서드를 호출합니다.
setPersistence(Persistence.NONE)
를 사용하여 각 인증 인스턴스의 지속성을 업데이트할 수 있습니다.
// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);
다음 단계
지원되는 ID 및 인증 서비스로 사용자 로그인 및 가입을 처리하는 방법에 대한 가이드를 살펴봅니다.