[플러터] Firebase Authentication에서 Google 로그인을 사용하여 인증
16130 단어 FirebaseAuthFirebase앱 개발Flutter
유저 로그인을 하는 것 같은 앱을 만들려고 생각해, Firebase Authentication과 Google 로그인을 사용해 유저 인증을 해 보았으므로 비망록도 할 수 있어 순서를 남깁니다.
Flutter 프로젝트 만들기
Flutter 프로젝트는 공식을 참고로 작성.
htps : // f ぅ라고 r. v / 두 cs / 게s ts r d / in s ta l
Firebase 프로젝트 설정
Firebase Authentication 기능을 이용하기 위해서는 우선 Firebase 설정을 합니다.
프로젝트 만들기
먼저 Firebase 콘솔에서 프로젝트를 만듭니다.
- 프로젝트 이름 입력
- Google 애널리틱스 설정을 권장하지만 이번에는 테스트이므로 설정하지 않습니다.
- 프로젝트 만들기
앱 설정
앱에서 Firebase를 사용하기 위해 앱을 설정합니다.
이번에는 Android 앱을 설정했습니다.
프로젝트 홈 화면에서 Android를 선택합니다.
앱 정보를 입력합니다.
Android 패키지 이름
앱 수준 bundle.gradle 파일의 applicationId에 나열되어 있습니다. (android/app/bundle.gradle)
디버깅을 위한 서명 인증서 SHA-1
Google 로그인 사용에 필요하므로 여기도 설정합니다.
keytool을 사용하여 SHA-1 해시를 얻을 수 있습니다.
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
google-service.json을 Flutter 앱에 추가
Firebase 구성 파일(google-service.json)을 다운로드하여 Flutter 프로젝트의 android/app/
아래에 배치합니다.
Gradle 파일 수정
google-services 플러그인을 사용할 수 있습니다.
프로젝트 수준 gralde 파일에 google-services 플러그인을 추가합니다.
android/bundle.gradledependencies {
classpath 'com.google.gms:google-services:4.2.0'
}
앱 레벨 gradle 파일에 다음을 추가.
android/app/bundle.gradledependencies {
//...
}
pply plugin: 'com.google.gms.google-services'
로그인 처리 구현
먼저 Firebase 및 Google 로그인 플러그인을 Flutter에 추가합니다.
pubspec.ymlfirebase_core: 0.4.4+3
firebase_auth: 0.16.0
google_sign_in: ^4.0.14
다음에 로그인 처리를 실시하는 화면을 구현합니다.
Login.dartimport 'package:flutter/material.dart';
// https://pub.dev/documentation/google_sign_in/latest/google_sign_in/google_sign_in-library.html
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Login extends StatefulWidget {
@override
_Login createState() => _Login();
}
class _Login extends State<Login> {
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;
Future<FirebaseUser> _handleSignIn() async {
GoogleSignInAccount currentUser = _googleSignIn.currentUser;
try {
currentUser ??= await _googleSignIn.signInSilently();
currentUser ??= await _googleSignIn.signIn();
if (currentUser == null) return null;
final GoogleSignInAuthentication googleAuth = await currentUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
idToken: googleAuth.idToken,
accessToken: googleAuth.accessToken
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
return user;
} catch(e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chat')
),
body: Center(
child: Column(
children: <Widget>[
SizedBox(height: 24.0),
FlatButton(
child: Text('SignIn'),
onPressed: () => _handleSignIn()
.then((FirebaseUser user) {
print(user);
Navigator.pushReplacementNamed(context, "/");
}).catchError((e) => print(e))
)
],
)
),
);
}
}
이제 Google 로그인으로 인증한 사용자의 정보를 얻을 수 있습니다.
인증한 사용자의 정보를 표시해 봅니다.
Home.dartimport 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
FirebaseUser user;
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future<void> _handleSignOut(context) async {
await FirebaseAuth.instance.signOut();
try {
await _googleSignIn.signOut();
} catch (e) {
print(e);
}
Navigator.pushReplacementNamed(context, "/");
}
@override
void initState() {
super.initState();
FirebaseAuth.instance
.currentUser()
.then((currentUser) => {user = currentUser});
}
@override
Widget build(BuildContext context) {
print(this.user.displayName);
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(user.displayName),
FlatButton(
child: Text('SignOut'), onPressed: () => _handleSignOut(context))
],
)
)
);
}
}
Google 계정의 사용자 이름이 표시되었습니다.
참고
Firebase 프로젝트 설정
htps : // 푹 빠져라. 오, ぇ. 이 m/두 cs/fぅ는 r/세츠 p? hl = 그럼
로그인 처리 주위
htps // 푸 b. V / Pac 게이 s / 흠뻑 _ th
Reference
이 문제에 관하여([플러터] Firebase Authentication에서 Google 로그인을 사용하여 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tai_gt/items/2da047a1bb0777d2d1bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Firebase Authentication 기능을 이용하기 위해서는 우선 Firebase 설정을 합니다.
프로젝트 만들기
먼저 Firebase 콘솔에서 프로젝트를 만듭니다.
- 프로젝트 이름 입력
- Google 애널리틱스 설정을 권장하지만 이번에는 테스트이므로 설정하지 않습니다.
- 프로젝트 만들기
앱 설정
앱에서 Firebase를 사용하기 위해 앱을 설정합니다.
이번에는 Android 앱을 설정했습니다.
프로젝트 홈 화면에서 Android를 선택합니다.
앱 정보를 입력합니다.
Android 패키지 이름
앱 수준 bundle.gradle 파일의 applicationId에 나열되어 있습니다. (android/app/bundle.gradle)
디버깅을 위한 서명 인증서 SHA-1
Google 로그인 사용에 필요하므로 여기도 설정합니다.
keytool을 사용하여 SHA-1 해시를 얻을 수 있습니다.
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
google-service.json을 Flutter 앱에 추가
Firebase 구성 파일(google-service.json)을 다운로드하여 Flutter 프로젝트의
android/app/
아래에 배치합니다.Gradle 파일 수정
google-services 플러그인을 사용할 수 있습니다.
프로젝트 수준 gralde 파일에 google-services 플러그인을 추가합니다.
android/bundle.gradle
dependencies {
classpath 'com.google.gms:google-services:4.2.0'
}
앱 레벨 gradle 파일에 다음을 추가.
android/app/bundle.gradle
dependencies {
//...
}
pply plugin: 'com.google.gms.google-services'
로그인 처리 구현
먼저 Firebase 및 Google 로그인 플러그인을 Flutter에 추가합니다.
pubspec.yml
firebase_core: 0.4.4+3
firebase_auth: 0.16.0
google_sign_in: ^4.0.14
다음에 로그인 처리를 실시하는 화면을 구현합니다.
Login.dart
import 'package:flutter/material.dart';
// https://pub.dev/documentation/google_sign_in/latest/google_sign_in/google_sign_in-library.html
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Login extends StatefulWidget {
@override
_Login createState() => _Login();
}
class _Login extends State<Login> {
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;
Future<FirebaseUser> _handleSignIn() async {
GoogleSignInAccount currentUser = _googleSignIn.currentUser;
try {
currentUser ??= await _googleSignIn.signInSilently();
currentUser ??= await _googleSignIn.signIn();
if (currentUser == null) return null;
final GoogleSignInAuthentication googleAuth = await currentUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
idToken: googleAuth.idToken,
accessToken: googleAuth.accessToken
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
return user;
} catch(e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chat')
),
body: Center(
child: Column(
children: <Widget>[
SizedBox(height: 24.0),
FlatButton(
child: Text('SignIn'),
onPressed: () => _handleSignIn()
.then((FirebaseUser user) {
print(user);
Navigator.pushReplacementNamed(context, "/");
}).catchError((e) => print(e))
)
],
)
),
);
}
}
이제 Google 로그인으로 인증한 사용자의 정보를 얻을 수 있습니다.
인증한 사용자의 정보를 표시해 봅니다.
Home.dart
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
FirebaseUser user;
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future<void> _handleSignOut(context) async {
await FirebaseAuth.instance.signOut();
try {
await _googleSignIn.signOut();
} catch (e) {
print(e);
}
Navigator.pushReplacementNamed(context, "/");
}
@override
void initState() {
super.initState();
FirebaseAuth.instance
.currentUser()
.then((currentUser) => {user = currentUser});
}
@override
Widget build(BuildContext context) {
print(this.user.displayName);
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(user.displayName),
FlatButton(
child: Text('SignOut'), onPressed: () => _handleSignOut(context))
],
)
)
);
}
}
Google 계정의 사용자 이름이 표시되었습니다.
참고
Firebase 프로젝트 설정
htps : // 푹 빠져라. 오, ぇ. 이 m/두 cs/fぅ는 r/세츠 p? hl = 그럼
로그인 처리 주위
htps // 푸 b. V / Pac 게이 s / 흠뻑 _ th
Reference
이 문제에 관하여([플러터] Firebase Authentication에서 Google 로그인을 사용하여 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tai_gt/items/2da047a1bb0777d2d1bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([플러터] Firebase Authentication에서 Google 로그인을 사용하여 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tai_gt/items/2da047a1bb0777d2d1bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)