본문 바로가기

ANDROID

[Firebase + Android] 회원가입과 로그인 구현

시나리오

1. 로그인 화면이 뜬다.

2. 로그인 화면에는 로그인을 할 수 있는 칸과 회원가입을 할 수 있는 버튼으로 구성됨.

3. 회원가입 버튼을 누른다.

4. 회원가입 정보를 입력한다.

5. 앱에 계정을 등록한다.

 

* 회원가입 *

- 파이어베이스 접근 권한 갖기

   FirebaseAuth firebaseAuth = firebaseAuth = FirebaseAuth.getInstance();

- 가입 버튼 --> 신규 계정 등록

  firebaseAuth.createUserWithEmailAndPassword(email, pwd).addOnCompleteListener(RegisterActivity.this, new 

  OnCompleteListener<AuthResult>()

 

등록이 완료되면 파이어베이스  Authentication에 등록이 된다.

 

- HashMap<Object,String> hashMap 

  해쉬맵은 그냥 테이블 개념과 똑같다. 회원 정보 데이터를 다른 곳에서도 쓰려면 이것을  데이터베이스에 저장 시켜야 

  한다. 이때 해쉬맵을 이용하여 테이블 형식으로 한번에 집어넣으면 편리하다.

 

  HashMap<Object,String> hashMap = new HashMap<>();

  hashMap.put("uid",uid);
  hashMap.put("email",email);
  hashMap.put("name",name);

 - HashMap 데이터베이스에 저장하기

  FirebaseDatabase database = FirebaseDatabase.getInstance();  //데이터 베이스에 접근 권한 갖기
  DatabaseReference reference = database.getReference("Users"); //데이터 베이스 Users라는 인스턴스 갖기
   

  reference.child(uid).setValue(hashMap); //그 자식에 HashMap 집어넣기

 

 XML에 기능

 

 - <com.google.android.material.textfield.TextInputLayout> 
  EditText에 입력된 텍스트를 기반으로 View가 유동적으로 반응하기 위해서 고안된 레이아웃이다. 이 태그는 AndroidX 

  버전에 맞춘 태그이다.

 

- app:passwordToggleEnabled="true"

  비밀번호의 보안성을 위해 토글 설정을 할 수 있다.

 

 

* 로그인 *

로그인은 회원가입보다 상대적으로 간단하다.

회원가입을 만들고 나면 로그인은 훨씬 쉽다. 만약 Authentication에 등록만 되어있다면 다음 한줄이면 로그인에 성공 

할 수 있다.

- firebaseAuth.signInWithEmailAndPassword(email,pwd)
  .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>()

  파이어베이스에 접근해 로그인 할 수 있다.

 

 

/*화면*/

로그인
회원가입

/*RegisterActivitiy*/

 

public class RegisterActivity extends AppCompatActivity {

    private static final String TAG = "RegisterActivity";
    EditText mEmailText, mPasswordText, mPasswordcheckText, mName;
    Button mregisterBtn;
    private FirebaseAuth firebaseAuth;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

    //액션 바 등록하기
    ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("Create Account");

        actionBar.setDisplayHomeAsUpEnabled(true); //뒤로가기버튼
        actionBar.setDisplayShowHomeEnabled(true); //홈 아이콘

        //파이어베이스 접근 설정
        // user = firebaseAuth.getCurrentUser();
        firebaseAuth =  FirebaseAuth.getInstance();
        //firebaseDatabase = FirebaseDatabase.getInstance().getReference();

        mEmailText = findViewById(R.id.emailEt);
        mPasswordText = findViewById(R.id.passwordEdt);
        mPasswordcheckText = findViewById(R.id.passwordcheckEdt);
        mregisterBtn = findViewById(R.id.register2_btn);
        mName = findViewById(R.id.nameEt);

        //파이어베이스 user 로 접글

        //가입버튼 클릭리스너   -->  firebase에 데이터를 저장한다.
         mregisterBtn.setOnClickListener(new View.OnClickListener(){

             @Override
             public void onClick(View v) {

                 //가입 정보 가져오기
                  final String email = mEmailText.getText().toString().trim();
                  String pwd = mPasswordText.getText().toString().trim();
                  String pwdcheck = mPasswordcheckText.getText().toString().trim();


                  if(pwd.equals(pwdcheck)) {
                      Log.d(TAG, "등록 버튼 " + email + " , " + pwd);
                      final ProgressDialog mDialog = new ProgressDialog(RegisterActivity.this);
                      mDialog.setMessage("가입중입니다...");
                      mDialog.show();

                      //파이어베이스에 신규계정 등록하기
                      firebaseAuth.createUserWithEmailAndPassword(email, pwd).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
                          @Override
                          public void onComplete(@NonNull Task<AuthResult> task) {

                              //가입 성공시
                              if (task.isSuccessful()) {
                                  mDialog.dismiss();

                                  FirebaseUser user = firebaseAuth.getCurrentUser();
                                  String email = user.getEmail();
                                  String uid = user.getUid();
                                  String name = mName.getText().toString().trim();

                                  //해쉬맵 테이블을 파이어베이스 데이터베이스에 저장
                                  HashMap<Object,String> hashMap = new HashMap<>();

                                  hashMap.put("uid",uid);
                                  hashMap.put("email",email);
                                  hashMap.put("name",name);

                                  FirebaseDatabase database = FirebaseDatabase.getInstance();
                                  DatabaseReference reference = database.getReference("Users");
                                  reference.child(uid).setValue(hashMap);


                                  //가입이 이루어져을시 가입 화면을 빠져나감.
                                  Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                                  startActivity(intent);
                                  finish();
                                  Toast.makeText(RegisterActivity.this, "회원가입에 성공하셨습니다.", Toast.LENGTH_SHORT).show();

                              } else {
                                  mDialog.dismiss();
                                  Toast.makeText(RegisterActivity.this, "이미 존재하는 아이디 입니다.", Toast.LENGTH_SHORT).show();
                                  return;  //해당 메소드 진행을 멈추고 빠져나감.

                              }

                          }
                      });

                   //비밀번호 오류시
                  }else{

                      Toast.makeText(RegisterActivity.this, "비밀번호가 틀렸습니다. 다시 입력해 주세요.", Toast.LENGTH_SHORT).show();
                      return;
                  }
             }
         });

}

    public boolean onSupportNavigateUp(){
        onBackPressed();; // 뒤로가기 버튼이 눌렸을시
        return super.onSupportNavigateUp(); // 뒤로가기 버튼
    }
}

 

/*LoginActivitiy*/

 

public class MainActivity extends AppCompatActivity {

  Button  mLoginBtn;
  TextView mResigettxt;
  EditText mEmailText, mPasswordText;
  private FirebaseAuth firebaseAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        firebaseAuth =  FirebaseAuth.getInstance();
        //버튼 등록하기
        mResigettxt = findViewById(R.id.register_t2);
        mLoginBtn = findViewById(R.id.login_btn);
        mEmailText = findViewById(R.id.emailEt);
        mPasswordText = findViewById(R.id.passwordEdt);


        //가입 버튼이 눌리면
        mResigettxt.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //intent함수를 통해 register액티비티 함수를 호출한다.
                startActivity(new Intent(MainActivity.this,RegisterActivity.class));

            }
        });

        //로그인 버튼이 눌리면
        mLoginBtn.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                String email = mEmailText.getText().toString().trim();
                String pwd = mPasswordText.getText().toString().trim();
                firebaseAuth.signInWithEmailAndPassword(email,pwd)
                        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                if(task.isSuccessful()){
                                    Intent intent = new Intent(MainActivity.this, BottomNaviActivity.class);
                                    startActivity(intent);

                                }else{
                                    Toast.makeText(MainActivity.this,"로그인 오류",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });

            }
        });
    }
}

 

'ANDROID' 카테고리의 다른 글

대세인 MVVM 에 대해서  (0) 2020.06.20
파이어베이스 & recyclerview 사용 방법  (0) 2020.01.21
[Android] 만보기 만들기  (2) 2020.01.08