Authentication
Firebase Authenticaion은 임시 익명 계정을 만들어 Firebase로 인증하는데 이용할 수 있습니다.
이러한 임시 익명 계정은 아직 앱에 가입하지 않은 사용자가 보안 규칙에 의해 보호되는 데이터로 작업할 수 있도록 하는 데 사용할 수 있습니다.
만약 익명 사용자가 앱에 가입하기로 결심하면, 익명 계정에 그들의 로그인 credential을 연결하여, 향후 세션에서도 보호되고 있는 데이터들을 이용해 계속 작업을 할 수 있습니다.
https://firebase.google.com/docs/auth/android/anonymous-auth
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:3.0.0'
}
}
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'
'Firebase Auth - 로그인 방법'에서 '익명'을 활성화합니다.
private void signInAnonymously() {
mFirebaseAuth.signInAnonymously()
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// fail
} else {
// success
}
}
});
}
익명 사용자가 앱에 가입하면, 그들의 새로운 계정으로 작업을 계속할 수 있도록 할 수 있습니다.
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를 이용하고 있습니다.
기존 사용자 계정에 인증 공급자 credential 연결하여 다수의 인증 공급자를 통해 앱에 로그인할 수 있습니다. 사용자들은 로그인했던 인증 공급자에 상관없이 동일한 Firebase 사용자 ID에 의해 식별됩니다.
예를 들어, 비밀번호로 가입된 사용자가 Google 계정으로 연결해 로그인하거나 익명 사용자가 Facebook 계정으로 연결해, Facebook을 통해 로그인할 수 있습니다.
https://firebase.google.com/docs/auth/android/account-linking
buildscript {
...
dependencies {
...
classpath 'com.google.gms:google-services:3.0.0'
}
}
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'
이 전에 , 앱에 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
}
}
});
}
사용자가 더 이상 공급자에 로그인하지 않도록, 계정에서 연결을 해제할 수 있습니다.
이를 위해 연결 해제 메소드에 공급자 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
}
}
});
}
}
https://github.com/oemilk/firebase/tree/master/app/src/main/java/com/sh/firebase/authentication