teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

内容変更。

2019/01/07 16:35

投稿

hameji001
hameji001

スコア639

answer CHANGED
@@ -1,7 +1,5 @@
1
1
  ~~これでどうでしょう???
2
- ~~
3
- ~~
4
- Swift
2
+ Swift
5
3
  // currentUserがnilならログインしていない
6
4
  if FIRAuth.auth()?.currentUser == nil {
7
5
  // ログインしていない時の処理
@@ -19,6 +17,7 @@
19
17
  まず、1度電話番号でユーザー登録すると
20
18
  電話番号ごとに「ユーザーUID」というものが作られることをFirebaseのconsoleで確認できるでしょうか?
21
19
  なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
20
+ しかし、このUIDを他のデータベース等と照合するのはgoogleでは非推奨とされています。(どこかに書いてありました)
22
21
  コードは多少はしょりますが、
23
22
 
24
23
  ```Swift
@@ -67,17 +66,31 @@
67
66
  ユーザー情報として保存した方がいいのではないでしょうか?
68
67
 
69
68
  FirebaseのAuthenticationの仕様上、
70
- 番号を入力ワンタイム和すワードを要求し、ログインした時点で、
69
+ 番号を入力ワンタイムパスワードを要求し、ログインした時点で、
71
70
  これまで登録がなくても、携帯番号は登録されますし、
72
71
  uidも作成されてしまうので、その後でそれらを取得しても、
73
72
  区別はできないと思われます。
74
73
 
75
- 上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
74
+ ~~上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
76
75
  userdefaults.standardのように
77
76
  fs_setBoolVariable("", forKey: ""),
78
77
  fs_setIntegerVariable("", forKey: ""),
79
78
  fs_setVariable("", forKey: ""),
80
79
  fs_setFloatVariable("", forKey: "")
81
- などがあるので、これらを利用して、
80
+ などがあるので、これらを利用して、~~
81
+
82
+ 上記を試してみましたが、うまく利用できませんでした。
83
+ やはり、firebaseのrealtime databaseかfirestoreに自分でデータ登録するか、
84
+
85
+ もしくはfirebaseで与えられてるユーザーのemail, displayname, photoURL などの
82
- 回数や日付など情報ユーザーに保持させて、呼び出せばいいと思ます。
86
+ 要素初期値変更したかどうかで条件分岐するのがいいのではなでしょうか?
87
+
83
- これで解決できるのではないでしょうか???
88
+ これで解決できるのではないでしょうか???
89
+
90
+ ちなみに、調べた限り、firebaseのAuthenticationの
91
+ consoleに表示されている作成日とログイン日は
92
+ Administer権限がないと取得できないみたいなので、
93
+ 実際にアプリのコード内で利用することはできないと思います。
94
+ [参考URL] https://firebase.google.com/docs/auth/admin/manage-users?hl=ja
95
+
96
+ 長くなってしまいました。

4

最後

2019/01/07 16:35

投稿

hameji001
hameji001

スコア639

answer CHANGED
@@ -59,15 +59,18 @@
59
59
  これで答えになるでしょうか???
60
60
 
61
61
  もう一度、質問を読んでみましたが、
62
+ もしかして、自分でログイン画面と登録画面を実装し、場合分けし、
62
- 自分でログイン画面と登録画面を分けて、表示を変えたいということですか?
63
+ 表示を変えたい・アプリ特有のユーザーの設定情報を保存したいということですか?
63
64
 
64
- その場合は、どこかにログイン回数や最終ログイン日などの
65
+ その場合は、Firebaseにログイン回数や最終ログイン日
66
+ 場合によってはアプリの設定情報なども
65
- ユーザー情報保存した方がいいのではないでしょうか?
67
+ ユーザー情報として保存した方がいいのではないでしょうか?
66
68
 
67
69
  FirebaseのAuthenticationの仕様上、
70
+ 番号を入力ワンタイム和すワードを要求し、ログインした時点で、
71
+ これまで登録がなくても、携帯番号は登録されますし、
68
- 番号を入力ログインた時点で、これま登録がなくても、
72
+ uidも作成されてまうので、その後それらを取得しても、
69
- 携帯番号は登録されますし、uidも作成されてしまうので、
70
- その後でそれらを取得しても、区別はできないと思われます。
73
+ 区別はできないと思われます。
71
74
 
72
75
  上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
73
76
  userdefaults.standardのように

3

今度こそ最終

2019/01/07 15:27

投稿

hameji001
hameji001

スコア639

answer CHANGED
@@ -1,13 +1,14 @@
1
- これでどうでしょう???
1
+ ~~これでどうでしょう???
2
-
2
+ ~~
3
+ ~~
3
- ``` Swift
4
+ Swift
4
5
  // currentUserがnilならログインしていない
5
6
  if FIRAuth.auth()?.currentUser == nil {
6
7
  // ログインしていない時の処理
7
8
  } else {
8
9
  // ログインしている時
9
10
  }
10
- ```
11
+ ~~
11
12
 
12
13
  /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
13
14
 

2

最終版

2019/01/07 15:21

投稿

hameji001
hameji001

スコア639

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  すると、hirukoさん、の言っているような挙動は認められませんでした。
17
17
 
18
18
  まず、1度電話番号でユーザー登録すると
19
- 電話番号ごとに「ユーザーUID」というものが作られることをconsoleで確認できるでしょうか?
19
+ 電話番号ごとに「ユーザーUID」というものが作られることをFirebaseのconsoleで確認できるでしょうか?
20
20
  なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
21
21
  コードは多少はしょりますが、
22
22
 
@@ -55,4 +55,25 @@
55
55
  仕様上、botじゃないという検証の自動認証ページに関しては、
56
56
  飛ばすことはできないと思います。
57
57
 
58
- これで答えになるでしょうか???
58
+ これで答えになるでしょうか???
59
+
60
+ もう一度、質問を読んでみましたが、
61
+ 自分でログイン画面と登録画面を分けて、表示を変えたいということですか?
62
+
63
+ その場合は、どこかにログイン回数や最終ログイン日などの
64
+ ユーザー情報を保存した方がいいのではないでしょうか?
65
+
66
+ FirebaseのAuthenticationの仕様上、
67
+ 番号を入力ログインした時点で、これまで登録がなくても、
68
+ 携帯番号は登録されますし、uidも作成されてしまうので、
69
+ その後でそれらを取得しても、区別はできないと思われます。
70
+
71
+ 上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
72
+ userdefaults.standardのように
73
+ fs_setBoolVariable("", forKey: ""),
74
+ fs_setIntegerVariable("", forKey: ""),
75
+ fs_setVariable("", forKey: ""),
76
+ fs_setFloatVariable("", forKey: "")
77
+ などがあるので、これらを利用して、
78
+ 回数や日付などの情報をユーザーに保持させて、呼び出せばいいと思います。
79
+ これで解決できるのではないでしょうか???

1

再検証、書き直しました。

2019/01/07 15:20

投稿

hameji001
hameji001

スコア639

answer CHANGED
@@ -7,4 +7,52 @@
7
7
  } else {
8
8
  // ログインしている時
9
9
  }
10
- ```
10
+ ```
11
+
12
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
13
+
14
+ Firebase Authentication で 携帯番号認証 を 実装して試してみました。
15
+
16
+ すると、hirukoさん、の言っているような挙動は認められませんでした。
17
+
18
+ まず、1度電話番号でユーザー登録すると
19
+ 電話番号ごとに「ユーザーUID」というものが作られることをconsoleで確認できるでしょうか?
20
+ なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
21
+ コードは多少はしょりますが、
22
+
23
+ ```Swift
24
+ Auth.auth().signInAndRetrieveData(with: credential) { (success, error) in
25
+ if error != nil {
26
+ print("error:", error)
27
+ } else {
28
+ print("success:", success)
29
+ print(success?.user.uid) // <-この文字列が携帯番号ごとに一意となります。
30
+ }
31
+ }
32
+ ```
33
+
34
+ で、本題はここからですが、想定している2通りの場面を考えると
35
+
36
+ ①既にユーザー登録した人が他の端末でアプリを使用する時 
37
+ これは、携帯電話番号が変わらず本人のものかどうかが大事になります。
38
+ もし、本人のものである場合は、その携帯に送られてくるワンタイムパスワード番号を入力してもらえれば、
39
+ 本人の情報を取得でき、本人としてログインできます。
40
+ ex) 携帯を手元に持ってて、たまたまパソコンからサービスにログイン、
41
+ 送られてくるワンタイムパスワードをその場で見て入力するパターン
42
+
43
+ 一方、もし携帯電番号がすでに本人のものでなくなった場合ですが、
44
+ この場合はワンタイムパスワードをもらえないので、他のログイン方法を確保しておく必要があります。
45
+ それを利用して携帯電話番号を修正できるようにしておかなければなりません。
46
+
47
+ ②ユーザー登録済みの人が一旦アプリを削除して、再インストールした時
48
+ 自分の環境で行ってみましたが、同じ番号を用いている限り、
49
+ 登録画面(絵を実際に選ぶ作業???)に飛ばされることはなかったです。
50
+ 本当に番号を初めて入力する初回のみ、Robotじゃない確認で絵を選ばされましたが、
51
+ それ以外はRobotじゃない確認をしています。って表示されるだけで、
52
+ 勝手に自動認証してくれて、ワンタイムパスワードが送られてきましたよ。
53
+ それはアプリを一度削除し、インストールし直したとしてもです。
54
+
55
+ 仕様上、botじゃないという検証の自動認証ページに関しては、
56
+ 飛ばすことはできないと思います。
57
+
58
+ これで答えになるでしょうか???