~~これでどうでしょう???
Swift
// currentUserがnilならログインしていない
if FIRAuth.auth()?.currentUser == nil {
// ログインしていない時の処理
} else {
// ログインしている時
}
~~
/////////////////////////
Firebase Authentication で 携帯番号認証 を 実装して試してみました。
すると、hirukoさん、の言っているような挙動は認められませんでした。
まず、1度電話番号でユーザー登録すると
電話番号ごとに「ユーザーUID」というものが作られることをFirebaseのconsoleで確認できるでしょうか?
なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
しかし、このUIDを他のデータベース等と照合するのはgoogleでは非推奨とされています。(どこかに書いてありました)
コードは多少はしょりますが、
Swift
1Auth.auth().signInAndRetrieveData(with: credential) { (success, error) in
2 if error != nil {
3 print("error:", error)
4 } else {
5 print("success:", success)
6 print(success?.user.uid) // <-この文字列が携帯番号ごとに一意となります。
7 }
8}
で、本題はここからですが、想定している2通りの場面を考えると
①既にユーザー登録した人が他の端末でアプリを使用する時
これは、携帯電話番号が変わらず本人のものかどうかが大事になります。
もし、本人のものである場合は、その携帯に送られてくるワンタイムパスワード番号を入力してもらえれば、
本人の情報を取得でき、本人としてログインできます。
ex) 携帯を手元に持ってて、たまたまパソコンからサービスにログイン、
送られてくるワンタイムパスワードをその場で見て入力するパターン
一方、もし携帯電番号がすでに本人のものでなくなった場合ですが、
この場合はワンタイムパスワードをもらえないので、他のログイン方法を確保しておく必要があります。
それを利用して携帯電話番号を修正できるようにしておかなければなりません。
②ユーザー登録済みの人が一旦アプリを削除して、再インストールした時
自分の環境で行ってみましたが、同じ番号を用いている限り、
登録画面(絵を実際に選ぶ作業???)に飛ばされることはなかったです。
本当に番号を初めて入力する初回のみ、Robotじゃない確認で絵を選ばされましたが、
それ以外はRobotじゃない確認をしています。って表示されるだけで、
勝手に自動認証してくれて、ワンタイムパスワードが送られてきましたよ。
それはアプリを一度削除し、インストールし直したとしてもです。
仕様上、botじゃないという検証の自動認証ページに関しては、
飛ばすことはできないと思います。
これで答えになるでしょうか???
もう一度、質問を読んでみましたが、
もしかして、自分でログイン画面と登録画面を実装し、場合分けし、
表示を変えたい・アプリ特有のユーザーの設定情報を保存したいということですか?
その場合は、Firebaseにログイン回数や最終ログイン日
場合によってはアプリの設定情報なども
ユーザー情報として保存した方がいいのではないでしょうか?
FirebaseのAuthenticationの仕様上、
番号を入力ワンタイムパスワードを要求し、ログインした時点で、
これまで登録がなくても、携帯番号は登録されますし、
uidも作成されてしまうので、その後でそれらを取得しても、
区別はできないと思われます。
上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
userdefaults.standardのように
fs_setBoolVariable("", forKey: ""),
fs_setIntegerVariable("", forKey: ""),
fs_setVariable("", forKey: ""),
fs_setFloatVariable("", forKey: "")
などがあるので、これらを利用して、
上記を試してみましたが、うまく利用できませんでした。
やはり、firebaseのrealtime databaseかfirestoreに自分でデータ登録するか、
もしくはfirebaseで与えられてるユーザーのemail, displayname, photoURL などの
要素の初期値を変更したかどうかで条件分岐するのがいいのではないでしょうか?
これで解決できるのではないでしょうか???
ちなみに、調べた限り、firebaseのAuthenticationの
consoleに表示されている作成日とログイン日は
Administer権限がないと取得できないみたいなので、
実際にアプリのコード内で利用することはできないと思います。
[参考URL] https://firebase.google.com/docs/auth/admin/manage-users?hl=ja
長くなってしまいました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/07 11:19
2019/01/07 11:26 編集
2019/01/07 11:29
2019/01/07 11:32
2019/01/07 11:44