From ffc844a6d16ffb9ff8e31b12b438b35dfb19724e Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 21:50:37 +0900 Subject: [PATCH 1/6] =?UTF-8?q?refactor=20:=20password=E3=81=AE=E3=83=90?= =?UTF-8?q?=E3=83=AA=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E6=8F=9B=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/place/activity/SignupActivity.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 0ad1406..657e032 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -8,7 +8,9 @@ import android.widget.ProgressBar import android.widget.Spinner import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.example.place.PasswordValidateStatus import com.example.place.databinding.ActivitySignupBinding +import com.example.place.validatePassword import com.google.android.material.snackbar.Snackbar import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseUser @@ -39,9 +41,10 @@ class SignupActivity : AppCompatActivity() { loadingBar.visibility = ProgressBar.INVISIBLE createAccountBtn.setOnClickListener { - if(binding.etSignupPass.text.toString().length > 6){ + val signupPassword = binding.etSignupPass.text.toString() + if(validatePassword(signupPassword) == PasswordValidateStatus.OK){ loadingBar.visibility = ProgressBar.VISIBLE - signUp(binding.etSignupEmail.text.toString(), binding.etSignupPass.text.toString()) + signUp(binding.etSignupEmail.text.toString(), signupPassword) createAccountBtn.isEnabled = false }else{ // Toast.makeText(baseContext, "パスワードは7文字以上にしてください", @@ -69,6 +72,7 @@ class SignupActivity : AppCompatActivity() { private fun signUp(email :String, password : String){ auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> + Log.i(TAG, task.toString()) if (task.isSuccessful) { // Sign up success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") From bf8270b59527958265b06a309d3dab1bbd223e69 Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 21:58:27 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix=20:=20email=E3=82=82=E3=83=90=E3=83=AA?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/place/activity/SignupActivity.kt | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 657e032..08612bc 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -8,8 +8,10 @@ import android.widget.ProgressBar import android.widget.Spinner import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.example.place.EmailValidateStatus import com.example.place.PasswordValidateStatus import com.example.place.databinding.ActivitySignupBinding +import com.example.place.validateEmail import com.example.place.validatePassword import com.google.android.material.snackbar.Snackbar import com.google.firebase.auth.FirebaseAuth @@ -42,16 +44,33 @@ class SignupActivity : AppCompatActivity() { createAccountBtn.setOnClickListener { val signupPassword = binding.etSignupPass.text.toString() - if(validatePassword(signupPassword) == PasswordValidateStatus.OK){ - loadingBar.visibility = ProgressBar.VISIBLE - signUp(binding.etSignupEmail.text.toString(), signupPassword) - createAccountBtn.isEnabled = false - }else{ -// Toast.makeText(baseContext, "パスワードは7文字以上にしてください", -// Toast.LENGTH_SHORT).show() - Snackbar.make(binding.root,"パスワードは7文字以上にしてください", Snackbar.LENGTH_SHORT).show() - } + val signupEmail = binding.etSignupEmail.text.toString() + + val validatePasswordResult = validatePassword(signupPassword) + val validateEmailResult = validateEmail(signupEmail) + when { + validateEmailResult == EmailValidateStatus.EMPTY || validatePasswordResult == PasswordValidateStatus.EMPTY -> { + Toast.makeText( + baseContext, "入力されていない項目があります", Toast.LENGTH_SHORT + ).show() + } + validateEmailResult == EmailValidateStatus.BAD_ADDRESS -> { + Toast.makeText( + baseContext, "有効なメールアドレスではありません", Toast.LENGTH_SHORT + ).show() + } + validatePasswordResult == PasswordValidateStatus.TOO_SHORT -> { + Toast.makeText( + baseContext, "パスワードは7文字以上にしてください", Toast.LENGTH_SHORT + ).show() + } + else -> { + loadingBar.visibility = ProgressBar.VISIBLE + signUp(signupEmail, signupPassword) + createAccountBtn.isEnabled = false + } + } } } From 15161844658e1174b93f815a62da8c6312f5dc30 Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 23:06:56 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix=20:=20=E3=82=A2=E3=82=AB=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=8B=E3=81=B6=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E3=81=8D=E3=81=AA=E3=81=A9=E3=81=AE=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=82=92=E5=87=A6=E7=90=86=E3=81=97=E3=80=81?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=81=AB=E3=82=8F=E3=81=8B=E3=82=8A?= =?UTF-8?q?=E3=82=84=E3=81=99=E3=81=8F=E3=81=99=E3=82=8B=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 以下を参考にする ``` public Task createUserWithEmailAndPassword (String email, String password) Tries to create a new user account with the given email address and password. If successful, it also signs the user in into the app. Access the signed-in user with getCurrentUser(). Upon successful completion, this operation triggers an FirebaseAuth.IdTokenListener.onIdTokenChanged(FirebaseAuth) event in all registered FirebaseAuth.IdTokenListeners and an FirebaseAuth.AuthStateListener.onAuthStateChanged(FirebaseAuth) event in all registered FirebaseAuth.AuthStateListeners. Important: you must enable Email & Password accounts in the Firebase console before you can use this method. Exceptions FirebaseAuthWeakPasswordException thrown if the password is not strong enough FirebaseAuthInvalidCredentialsException thrown if the email address is malformed FirebaseAuthUserCollisionException thrown if there already exists an account with the given email address ``` --- .../example/place/activity/SignupActivity.kt | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 08612bc..633a1a9 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -14,8 +14,7 @@ import com.example.place.databinding.ActivitySignupBinding import com.example.place.validateEmail import com.example.place.validatePassword import com.google.android.material.snackbar.Snackbar -import com.google.firebase.auth.FirebaseAuth -import com.google.firebase.auth.FirebaseUser +import com.google.firebase.auth.* import com.google.firebase.auth.ktx.auth import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.ktx.Firebase @@ -130,9 +129,26 @@ class SignupActivity : AppCompatActivity() { } else { // If sign up fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) -// Toast.makeText(baseContext, "Authentication failed.", -// Toast.LENGTH_SHORT).show() - Snackbar.make(binding.root,"Authentication failed.", Snackbar.LENGTH_SHORT).show() + when(task.exception){ + is FirebaseAuthWeakPasswordException -> { + Log.i(TAG, "the password is not strong enough") + Snackbar.make(binding.root,"脆弱なパスワードです", Snackbar.LENGTH_SHORT).show() + } + + is FirebaseAuthInvalidCredentialsException -> { + Log.i(TAG, " if the email address is malformed") + Snackbar.make(binding.root,"有効なメールアドレスを入力してください", Snackbar.LENGTH_SHORT).show() + } + + is FirebaseAuthUserCollisionException -> { + Log.i(TAG, "there already exists an account with the given email address") + Snackbar.make(binding.root,"すでに登録されているメールアドレスです", Snackbar.LENGTH_SHORT).show() + } + + else -> { + Log.e(TAG, "謎のエラー") + } + } loadingBar.visibility = ProgressBar.INVISIBLE signUpMsg(null) From 21bee610a24e73532ff971a6074ec57035d7b2b5 Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 23:08:36 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix=20:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E5=87=A6=E7=90=86=E4=B8=AD=E3=81=A7=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=81=AB=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E5=90=8C=E3=81=98=E5=8B=95=E4=BD=9C=E9=83=A8=E5=88=86=E3=81=AF?= =?UTF-8?q?=E5=89=8A=E9=99=A4=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/place/activity/SignupActivity.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 633a1a9..64c814d 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -79,11 +79,7 @@ class SignupActivity : AppCompatActivity() { Log.d(TAG,"sign up : this user is exist") Toast.makeText(baseContext, "サインアップ完了しました", Toast.LENGTH_SHORT).show() - }else{ - Log.d(TAG,"sign up : Error") - } - } @@ -151,7 +147,6 @@ class SignupActivity : AppCompatActivity() { } loadingBar.visibility = ProgressBar.INVISIBLE - signUpMsg(null) createAccountBtn.isEnabled = true } From 6b8eaa500e9292236d818a2b837c97cbfdd02d1e Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 23:11:51 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore=20:=20=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E6=95=B4=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/place/activity/SignupActivity.kt | 153 ++++++++++-------- 1 file changed, 83 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 64c814d..28182ea 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -21,12 +21,12 @@ import com.google.firebase.ktx.Firebase class SignupActivity : AppCompatActivity() { // Initialize Firebase Auth - private var auth : FirebaseAuth = Firebase.auth + private var auth: FirebaseAuth = Firebase.auth private lateinit var binding: ActivitySignupBinding - private lateinit var envSpn : Spinner - private lateinit var mlSpn : Spinner - private lateinit var createAccountBtn : Button - private lateinit var loadingBar : ProgressBar + private lateinit var envSpn: Spinner + private lateinit var mlSpn: Spinner + private lateinit var createAccountBtn: Button + private lateinit var loadingBar: ProgressBar override fun onCreate(savedInstanceState: Bundle?) { @@ -74,95 +74,108 @@ class SignupActivity : AppCompatActivity() { } - private fun signUpMsg(user : FirebaseUser?){ - if(user != null){ - Log.d(TAG,"sign up : this user is exist") - Toast.makeText(baseContext, "サインアップ完了しました", - Toast.LENGTH_SHORT).show() + private fun signUpMsg(user: FirebaseUser?) { + if (user != null) { + Log.d(TAG, "sign up : this user is exist") + Toast.makeText( + baseContext, "サインアップ完了しました", + Toast.LENGTH_SHORT + ).show() } } - private fun signUp(email :String, password : String){ + private fun signUp(email: String, password: String) { auth.createUserWithEmailAndPassword(email, password) - .addOnCompleteListener(this) { task -> - Log.i(TAG, task.toString()) - if (task.isSuccessful) { - // Sign up success, update UI with the signed-in user's information - Log.d(TAG, "createUserWithEmail:success") - val db = FirebaseFirestore.getInstance() - val user = auth.currentUser - - user?.uid?.let { - db.collection("users").document(it).collection("data") - .add( - hashMapOf( - "mLearningExp" to mlSpn.selectedItem, - "mLearningEnvironment" to envSpn.selectedItem, - "e-mail" to user.email - ) + .addOnCompleteListener(this) { task -> + Log.i(TAG, task.toString()) + if (task.isSuccessful) { + // Sign up success, update UI with the signed-in user's information + Log.d(TAG, "createUserWithEmail:success") + val db = FirebaseFirestore.getInstance() + val user = auth.currentUser + + user?.uid?.let { + db.collection("users").document(it).collection("data") + .add( + hashMapOf( + "mLearningExp" to mlSpn.selectedItem, + "mLearningEnvironment" to envSpn.selectedItem, + "e-mail" to user.email ) - .addOnSuccessListener { - Log.d(TAG, "DocumentSnapshot added with ID: ") - signUpMsg(user) - - //サインアップ完了でメール送信 - user.sendEmailVerification() - .addOnCompleteListener { task -> - if (task.isSuccessful) { - Log.d(TAG, "Email sent.") - } + ) + .addOnSuccessListener { + Log.d(TAG, "DocumentSnapshot added with ID: ") + signUpMsg(user) + + //サインアップ完了でメール送信 + user.sendEmailVerification() + .addOnCompleteListener { task -> + if (task.isSuccessful) { + Log.d(TAG, "Email sent.") } - // 登録後ホームへ移行 - gotoMain() - } - .addOnFailureListener { e -> - Log.w(TAG, "Error adding document", e) - } - } - - - } else { - // If sign up fails, display a message to the user. - Log.w(TAG, "createUserWithEmail:failure", task.exception) - when(task.exception){ - is FirebaseAuthWeakPasswordException -> { - Log.i(TAG, "the password is not strong enough") - Snackbar.make(binding.root,"脆弱なパスワードです", Snackbar.LENGTH_SHORT).show() + } + // 登録後ホームへ移行 + gotoMain() } - - is FirebaseAuthInvalidCredentialsException -> { - Log.i(TAG, " if the email address is malformed") - Snackbar.make(binding.root,"有効なメールアドレスを入力してください", Snackbar.LENGTH_SHORT).show() + .addOnFailureListener { e -> + Log.w(TAG, "Error adding document", e) } + } - is FirebaseAuthUserCollisionException -> { - Log.i(TAG, "there already exists an account with the given email address") - Snackbar.make(binding.root,"すでに登録されているメールアドレスです", Snackbar.LENGTH_SHORT).show() - } - else -> { - Log.e(TAG, "謎のエラー") - } + } else { + // If sign up fails, display a message to the user. + Log.w(TAG, "createUserWithEmail:failure", task.exception) + when (task.exception) { + is FirebaseAuthWeakPasswordException -> { + Log.i(TAG, "the password is not strong enough") + Snackbar.make(binding.root, "脆弱なパスワードです", Snackbar.LENGTH_SHORT).show() } - loadingBar.visibility = ProgressBar.INVISIBLE - createAccountBtn.isEnabled = true + is FirebaseAuthInvalidCredentialsException -> { + Log.i(TAG, " if the email address is malformed") + Snackbar.make( + binding.root, + "有効なメールアドレスを入力してください", + Snackbar.LENGTH_SHORT + ).show() + } + + is FirebaseAuthUserCollisionException -> { + Log.i( + TAG, + "there already exists an account with the given email address" + ) + Snackbar.make( + binding.root, + "すでに登録されているメールアドレスです", + Snackbar.LENGTH_SHORT + ).show() + } + else -> { + Log.e(TAG, "謎のエラー") + } } - // ... + loadingBar.visibility = ProgressBar.INVISIBLE + createAccountBtn.isEnabled = true + } + + // ... + } } - private fun gotoMain(){ + private fun gotoMain() { //ホーム画面へ遷移 val mainIntent = Intent(applicationContext, MainActivity::class.java) startActivity(mainIntent) finish() } - companion object{ - private const val TAG ="SignupActivity" + companion object { + private const val TAG = "SignupActivity" } } \ No newline at end of file From 00dea80ecd6e1ab2b1e1774f363c03aa80a60916 Mon Sep 17 00:00:00 2001 From: "mahiro.imabeppu" Date: Sun, 30 Jul 2023 23:29:28 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor=20:=20=EF=BC=91=E3=83=A1=E3=82=BD?= =?UTF-8?q?=E3=83=83=E3=83=89=E3=81=8C=E9=95=B7=E3=81=84=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E5=88=87=E3=82=8A=E5=87=BA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/place/activity/SignupActivity.kt | 71 ++++++++++--------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/example/place/activity/SignupActivity.kt b/app/src/main/java/com/example/place/activity/SignupActivity.kt index 28182ea..f4a3f86 100644 --- a/app/src/main/java/com/example/place/activity/SignupActivity.kt +++ b/app/src/main/java/com/example/place/activity/SignupActivity.kt @@ -13,6 +13,7 @@ import com.example.place.PasswordValidateStatus import com.example.place.databinding.ActivitySignupBinding import com.example.place.validateEmail import com.example.place.validatePassword +import com.google.android.gms.tasks.Task import com.google.android.material.snackbar.Snackbar import com.google.firebase.auth.* import com.google.firebase.auth.ktx.auth @@ -75,10 +76,10 @@ class SignupActivity : AppCompatActivity() { private fun signUpMsg(user: FirebaseUser?) { - if (user != null) { + user?.let { Log.d(TAG, "sign up : this user is exist") Toast.makeText( - baseContext, "サインアップ完了しました", + baseContext, "${user}でサインアップ完了しました", Toast.LENGTH_SHORT ).show() } @@ -127,38 +128,7 @@ class SignupActivity : AppCompatActivity() { } else { // If sign up fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) - when (task.exception) { - is FirebaseAuthWeakPasswordException -> { - Log.i(TAG, "the password is not strong enough") - Snackbar.make(binding.root, "脆弱なパスワードです", Snackbar.LENGTH_SHORT).show() - } - - is FirebaseAuthInvalidCredentialsException -> { - Log.i(TAG, " if the email address is malformed") - Snackbar.make( - binding.root, - "有効なメールアドレスを入力してください", - Snackbar.LENGTH_SHORT - ).show() - } - - is FirebaseAuthUserCollisionException -> { - Log.i( - TAG, - "there already exists an account with the given email address" - ) - Snackbar.make( - binding.root, - "すでに登録されているメールアドレスです", - Snackbar.LENGTH_SHORT - ).show() - } - - else -> { - Log.e(TAG, "謎のエラー") - } - } - + checkFirebaseAuthException(task) loadingBar.visibility = ProgressBar.INVISIBLE createAccountBtn.isEnabled = true @@ -168,6 +138,39 @@ class SignupActivity : AppCompatActivity() { } } + private fun checkFirebaseAuthException(task: Task){ + when (task.exception) { + is FirebaseAuthWeakPasswordException -> { + Log.i(TAG, "the password is not strong enough") + Snackbar.make(binding.root, "脆弱なパスワードです", Snackbar.LENGTH_SHORT).show() + } + + is FirebaseAuthInvalidCredentialsException -> { + Log.i(TAG, " if the email address is malformed") + Snackbar.make( + binding.root, + "有効なメールアドレスを入力してください", + Snackbar.LENGTH_SHORT + ).show() + } + + is FirebaseAuthUserCollisionException -> { + Log.i( + TAG, + "there already exists an account with the given email address" + ) + Snackbar.make( + binding.root, + "すでに登録されているメールアドレスです", + Snackbar.LENGTH_SHORT + ).show() + } + + else -> { + Log.e(TAG, "謎のエラー") + } + } + } private fun gotoMain() { //ホーム画面へ遷移 val mainIntent = Intent(applicationContext, MainActivity::class.java)