brunch

Firebase #06-3

Authentication

by 이승현

Authenticate with Firebase Anonymously on Android



Firebase Authenticaion은 임시 익명 계정을 만들어 Firebase로 인증하는데 이용할 수 있습니다.

이러한 임시 익명 계정은 아직 앱에 가입하지 않은 사용자가 보안 규칙에 의해 보호되는 데이터로 작업할 수 있도록 하는 데 사용할 수 있습니다.

만약 익명 사용자가 앱에 가입하기로 결심하면, 익명 계정에 그들의 로그인 credential을 연결하여, 향후 세션에서도 보호되고 있는 데이터들을 이용해 계속 작업을 할 수 있습니다.


https://firebase.google.com/docs/auth/android/anonymous-auth



1. google-service.json 추가

#01 구성 파일 복사


2. plugin 추가

다운로드 (1).png #02 Project build.gradle에 추가
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:3.0.0'
}
}
22222.PNG #03 app build.gradle에 추가
apply plugin: 'com.android.application'

...

dependencies {
...
compile 'com.google.firebase:firebase-auth:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'
}

apply plugin: 'com.google.gms.google-services'


3. Enable Anonymous auth in Firebase console


'Firebase Auth - 로그인 방법'에서 '익명'을 활성화합니다.

캡처.PNG #04 익명 사용 설정


4. Sign In Anonymously


private void signInAnonymously() {
mFirebaseAuth.signInAnonymously()
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// fail
} else {
// success
}
}
});
}
캡처5.PNG #05 익명 사용자


5. Convert an anonymous account to a permanent account


익명 사용자가 앱에 가입하면, 그들의 새로운 계정으로 작업을 계속할 수 있도록 할 수 있습니다.

private void convertToPermanentAccount() {
// AuthCredential credential = GoogleAuthProvider.getCredential(Token, null);
// AuthCredential credential = FacebookAuthProvider.getCredential(t.getToken());
String email = "anonymoustest@test.com";
String password = "123456";
AuthCredential credential = EmailAuthProvider.getCredential(email, password);

mFirebaseAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// fail
} else {
// success
}
}
});
}

익명 사용자를 영구 사용자로 전환 시, 동일한 사용자 UID를 이용하고 있습니다.

캡처6.PNG #06 익명 사용자 >> 영구 사용자 전환




Link Multiple Auth Providers to an Account



기존 사용자 계정에 인증 공급자 credential 연결하여 다수의 인증 공급자를 통해 앱에 로그인할 수 있습니다. 사용자들은 로그인했던 인증 공급자에 상관없이 동일한 Firebase 사용자 ID에 의해 식별됩니다.

예를 들어, 비밀번호로 가입된 사용자가 Google 계정으로 연결해 로그인하거나 익명 사용자가 Facebook 계정으로 연결해, Facebook을 통해 로그인할 수 있습니다.


https://firebase.google.com/docs/auth/android/account-linking



1. google-service.json 추가

#01 구성 파일 복사


2. plugin 추가

다운로드 (1).png #02 Project build.gradle에 추가
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:3.0.0'
}
}
22222.PNG #03 app build.gradle에 추가
apply plugin: 'com.android.application'

...

dependencies {
...
compile 'com.google.firebase:firebase-auth:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'
}

apply plugin: 'com.google.gms.google-services'


3. Link auth provider credentials to a user account


이 전에 , 앱에 2개 이상의 인증 공급자(가능하면 익명 인증을 포함한)에 대한 지원을 추가해야 합니다.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하려면:

인증 공급자나 메소드를 이용해 사용자 로그인을 합니다.

새로운 인증 공급자를 위해 FirebaseAuth.signInWith 메소드를 제외한 로그인 flow를 완료해야 합니다. 예를 들어, 사용자의 구글 ID 토큰, 페이스북 접근 토큰, 또는 이메일과 비밀번호입니다.

새 인증 공급자를 위해 AuthCredential을 얻습니다.

// Google Sign-In
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

// Facebook Login
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

// Email-password sign-in
AuthCredential credential = EmailAuthProvider.getEmailAuthCredential(email, password);

AuthCredential 객체를 사용자의 linkWithCredential 메소드에 전달합니다.

private void link() {
String email = "anonymoustest@test.com";
String password = "123456";
AuthCredential credential = EmailAuthProvider.getCredential(email, password);

mFirebaseAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// fail
} else {
// success
}
}
});
}


4. Unlink an auth provider from a user account


사용자가 더 이상 공급자에 로그인하지 않도록, 계정에서 연결을 해제할 수 있습니다.

이를 위해 연결 해제 메소드에 공급자 ID를 전달해야 합니다.

private void unlink() {
if (mFirebaseAuth.getCurrentUser() != null) {
String providerId = mFirebaseAuth.getCurrentUser().getProviderId();
FirebaseAuth.getInstance().getCurrentUser().unlink(providerId)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// fail
} else {
// success
}
}
});
}
}




Sample


https://github.com/oemilk/firebase/tree/master/app/src/main/java/com/sh/firebase/authentication



keyword
작가의 이전글Firebase #06-2