2017-11-14 15 views
1

私は電子メール/パスワードの登録とログインを設定しました。Firebase Android自動ログイン

これは機能しています。私はFirebaseがこれを世話したと思ったが、明らかにそうではなかった。 ユーザーがアプリを終了した後、アプリを開く次回にログインする必要があります。

何が欠けていますか?

class LoginActivity : AppCompatActivity(){ 
    lateinit var auth: FirebaseAuth 
    lateinit var user: FirebaseAuth 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_login) 

     auth = FirebaseAuth.getInstance() 
    } 

    fun loginLoginClicked(view: View) { 
     // Perform login 

     val email = loginEmailTxt.text.toString() 
     val password = loginPasswordTxt.text.toString() 

     auth.signInWithEmailAndPassword(email, password) 
       .addOnSuccessListener { 
        finish() 
       } 
       .addOnFailureListener { exception -> 
        Log.e("Exception", "Could not sign in user - ${exception.localizedMessage}") 
       } 
     val loginIntent = Intent(this, MainActivity::class.java) 
     startActivity(loginIntent) 
    } 

    fun loginCreateClicked(view: View) { 
     // segue to the create user activity 

     val createIntent = Intent(this, SignUpActivity::class.java) 
     startActivity(createIntent) 
    }} 
} 
+1

[Firebase:Androidユーザーをログインさせる方法]の重複している可能性があります(https://stackoverflow.com)。/question/22262463/firebase-how-to-keep-an-an-user-user-logged-in) – Redman

答えて

1

ファイアベース認証は自動的に認証状態を覚えているため、アプリケーションの再起動時にユーザーは認証されます。

しかし、あなたのLoginActivityランチャー活動である場合は、ユーザーがonCreate()に認証されているかどうかを確認する必要がありますので、あなたはまだ、この活動に着陸でしょう、そして、彼らはすでにログインしている場合は、あなたのMainActivityにリダイレクト以下のようなもの、中:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_login) 

    auth = FirebaseAuth.getInstance() 

    if (auth.getCurrentUser() != null) { 
     // User is signed in (getCurrentUser() will be null if not signed in) 
     val intent = Intent(this, MainActivity::class.java) 
     startActivity(intent) 
     finish() 
    } 
} 

これは、彼らがログインしていない場合は、ユーザーがログインして、またはnullされている場合FirebaseUserオブジェクトを返しますFirebaseAuth#getCurrentUser()方法を使用する代わりに

、あなたは交換ができます。それはアロあなたがログインしていない場合は、MainActivityがランチャーアクティビティであり、ユーザがログインしていない場合は、LoginActivityと表示されます。

+0

ありがとう、試しに行く – JDOEs

+0

ユーザーがログインしていることを確認するにはどうすればよいですか? – JDOEs

+0

私はすべてのユーザーを削除したので、あなたが私に与えたコードはまだMainActivityにかかります。ユーザーがいないので、ログインすることは不可能です – JDOEs