본문 바로가기

Android/라이브러리

안드로이드 Firebase Auth 사용하기

안녕하세요.


첫 포스팅 입니다.


첫 포스팅으로는 제가 유용하게 사용하고 있는 Firebase Auth에 대해서 포스팅 해보려 합니다.


일단 Firebase는 Google구글 에서 서비스하는 기능으로


가장 큰 퍼포먼스로는 서버의 구현없이 서버의 기능을 사용할 수 있는 것입니다.


그 기능으로는 


계정관리(Authentication), 메세징서비스(Cloud Messaging FCM), 실시간 데이터베이스(Realtime Database),

호스팅(Hosting), 앱 분석을 위한(Analytics)등 여러가지 기능을 제공합니다.


자세한 내용은

https://firebase.google.com/docs/



저는 이 많은 기능중에 Firebase Authentication이라는 계정관리 기능을 사용하였습니다.


그 이유는 먼저 계정에 대해서는 보안에 대한 걱정을 많이 하게되는데 이부분은 저도 확실치는 않으나 구글에서 그 데이터를 가지고 있기 때문에


해킹이나 문제가 되는 많은 외부 요인들로 부터 좀 안전하지 않을까 싶어서 사용을 하였고,


다른 서비스의 로그인 API까지 쉽게 사용이 가능해서 사용하였습니다. (Google, Facebook, Twitter, GitHub(?))



이번 포스팅에서는 다른 서비스에 대한 로그인 API까진 다뤄보지 않을 것이고


이메일 + 비밀번호 형태인 일반적으로 사용이 가능한 로그인 기능을 만들어 보려고 합니다.


(여기서 더 자세한 정보들과 강좌를 볼 수 있습니다.)

https://firebase.google.com/docs/auth/



먼저,

https://console.firebase.google.com/

에서 자신의 프로젝트를 등록합니다.


이 부분은 한글로 되있어서 쉽게 따라할 수 있습니다.


먼저 자신의 앱 프로젝트 build.gradle(Module:app)에

dependencies {
     ..
     compile 'com.google.firebase:firebase-auth:9.6.1'
}
를 추가해 줍니다.

그리고
자신의 파이어베이스 프로젝트 콘솔에 Auth의 로그인 방법중 이메일/비밀번호 방식이 사용설정이 되있나 확인합니다.



로그인이나 회원가입하는 부분에 아래와 같은 형식으로 파이어베이스 계정에 대한 정보를 가지고 있는 객체를 가져옵니다.


private FirebaseAuth mAuth;
// ...
mAuth = FirebaseAuth.getInstance();



먼저 회원가입을 해봅시다.


mAuth.createUserWithEmailAndPassword(email,password)
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                  if(task.isSuccessful()){

                        Log.d(TAG,”Sign Up Success”);
                  }else{
                        Log.d(TAG,”Sign Up Fail”);
	                //보통 이메일이 이미 존재하거나, 이메일 형식이아니거나, 비밀번호가 6자리 이상이 아닐 때 발생

                  }
            
}
      );

이런 식으로 회원가입이 가능합니다.


다음은 로그인에 대해 봅시다.


mAuth.signInWithEmailAndPassword(email,password)
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
                  public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccess()){
                              Log.d(TAG,"Sign In Success");
                         } else {
                              Log.d(TAG,"Sign In Fail");
                         }
                  }
            }
      );


비슷한 방법으로 로그인도 진행이 가능합니다.



이렇게 회원가입을 하거나 로그인을 진행하게 되면 mAuth에는 회원의 정보가 들어가게 됩니다.


또는 로그아웃을 통해서 mAuth의 회원정보가 비거나 하는 상태가 변경이 될때마다 실행되는 이벤트에 대해 알아보겠습니다.


이 이벤트를 통해서 만약 로그인 화면에서 mAuth에 회원정보가 있다면 로그인을 하지 않고 메인으로 이동을 시키고


만약 정보가 없다면 회원가입을 시키는 등의 처리를 할 수 있습니다.



private FirebaseAuth.AuthStateListener mAuthListener;
// ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
            // ...
        }
    };
    // ...
}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

저는 만약 유저가 있다면


startActivity(new Intent(getApplicationContext(), MainActivity.class);
finish();

보통 이러한 작업을 합니다..


또 저는 회원에 대한 다른 정보들과 또 그 회원이 글을 쓰거나 하면 그 회원을 구별하기 위해서

따로 저의 서버에 uid를 따로 저장해두고 있습니다.



네, 이렇게 쉽게 회원가입, 로그인 기능을 만들어 낼 수 있습니다.

기존의 서버언어로 직접 SQL문을 작성해서 DB테이블 만들고 했던 작업보다는 훨씬 시간을 절약도 가능하고,

보안에 대한 부분을 신경쓸 이유도 적어졌습니다.



이번 포스팅으로는 이메일, 비밀번호를 통해서 계정을 등록하는 법을 다뤘지만

다음 포스팅에서는 Facebook이나 Google등 다른 SNS을 이용한 로그인 방법에 대해 포스팅하겠습니다.