로그인 시 Firebase 회원정보에 따라 액티비티가 나뉘는 것을 구현하였습니다.

Realtime Database 내부

읽기, 쓰기의 권한을 true로 설정

Login.kt

전역변수

    private lateinit var binding: ActivityLoginBinding //데이터바인딩

    private var auth: FirebaseAuth? = null //파이어베이스 인증

    private lateinit var OwnerDB : DatabaseReference //실시간 데이터베이스
    private var userID: String? = null
    private var user: FirebaseUser? = null

 

onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)
        auth = FirebaseAuth.getInstance()
        OwnerDB = FirebaseDatabase.getInstance().getReference("Owner")
        loginInit()
    }

 

 

 

private fun loginInit() = with(binding) {

        loginButton.setOnClickListener {
            val id = idEditTextView.text.toString()
            val pw = passwordEditTextView.text.toString()

            auth!!.signInWithEmailAndPassword(id, pw).addOnCompleteListener { Task ->
                user = FirebaseAuth.getInstance().currentUser
                userID = user!!.uid
                if(Task.isSuccessful) {
                    //OwnerDB에서 데이터를 가져왔을때
                    OwnerDB.child(userID!!).addListenerForSingleValueEvent(object : ValueEventListener {
                        override fun onDataChange(snapshot: DataSnapshot) {
                            //데이터를 할당
                            val data = snapshot.value
       //데이터가 없을경우 해당유저는 User라는 의미이니 User화면으로 이동 아닌경우는 Owner화면으로 이동
                            if(data == null){
                                Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
                                val intent = Intent(this@Login, MainActivityUser::class.java)
                                startActivity(intent)
                            }else{
                                Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
                                val intent = Intent(this@Login, MainActivityOwner::class.java)
                                startActivity(intent)
                            }
                        }

                        override fun onCancelled(error: DatabaseError) {
                        }
                    })
                }
            }
        }
    }

 

요약

auth.signInWithEmailAndPassword를 통해ID, PW의 값이 일치하는지 확인

auth!!.signInWithEmailAndPassword(id, pw).addOnCompleteListener { Task ->

 

 

전역변수 user를 현재 유저의 데이터의 값을 정의한 후 userID의 uid 값을 함께 정의 한다

    private var userID: String? = null
    private var user: FirebaseUser? = null

    user = FirebaseAuth.getInstance().currentUser
    userID = user!!.uid //로그인 된 User의 uid
 

 

addListenerForSingleValueEvent() 메소드로 데이터를 할당 시킨 후 null로 구별하여 Activity 나누기

if(Task.isSuccessful) {
                //OwnerDB에서 데이터를 가져왔을때
                OwnerDB.child(userID!!).addListenerForSingleValueEvent(object : ValueEventListener {
                    override fun onDataChange(snapshot: DataSnapshot) {
                        //데이터를 할당
                        val data = snapshot.value
            //데이터가 없을경우 해당유저는 User라는 의미이니 User화면으로 이동 아닌경우는 Owner화면으로 이동
                        if(data == null){
                            Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
                            val intent = Intent(this@Login, MainActivityUser::class.java)
                            startActivity(intent)
                        }else{
                           //Toast 및 intent(Owner) 구현
                        }
                    }
                    override fun onCancelled(error: DatabaseError) {
                    }
                })
            }
        }
복사했습니다!