【質問内容】signup/login with apiについて 新規登録時にログイン方法をメール+パ......

【質問内容】signup/login with apiについて
新規登録時にログイン方法をメール+パスワードか電話番号+パスワードかLINEソーシャルログインの3パターンを設定しているのですが、ログイン時にメール+パスワードで設定してたユーザーがLINEログインを選択するとLINEでログインできてしまいます。
LINEログインを選択していないユーザーがLINEログインでログインしようとした際に弾く方法はないのでしょうか。

回答者1
step1に only when current user’s lineid is not emptyとするのはどうでしょうか?

質問者
その場合のcurrent userはどのようにbubbleに認識させればよろしいのでしょうか。
ログインしていない状態だとcurrent userは空ではないでしょうか。

回答者1
あ、確かにそうですね、失礼しました!
いい案あればすぐ共有します!

質問者
いえいえ!いつもご教授いただき助かってます!いい案思いついたら教えて下さい!こっちで解決できたら共有するようにします!

回答者2
1つの手段として「ユーザ登録時にログイン方法を判別フラグをつける」とログイン方法を限定することが可能です。
例えばUserのデータベース上に「loginMethod」の項目を追加し、「mail/phone/line」のいずれかの値を入れます。ユーザ登録/ログイン時にその値が存在しなければ実行を許可する、のようにすればOKです。
ただし1つ注意点があり、今後「ユーザ側」に複数のログイン方法を許可しようとする場合、上記の仕様では変更ができません。複数ログインを許可する場合はデータベースの形式を次のようにすると後で拡張する際に役立ちます。

ヘッダ名

userId, userMail, userPass, userPhone, userLineId, isLoginableViaMail, isLoginableViaPhone, isLoginableViaLine

実際のデータ例

メールログインだけ可能

67b363b7-4ec0-4fc2-a87b-4c4a77426bd3, hoge@example.com, (***), (空), (空), true, false, false

メールログイン、ラインログインが可能

7a161f2-f13e-11ea-adc1-0242ac120002, hoge@example.com, (***), (空), testLineId, true, false, true

ラインログインだけ可能

7032385e-f13e-11ea-adc1-0242ac120002, (空), (不明), testLineId, false, false, true
最初は「loginMethod」のように「isLoginableViaMail, isLoginableViaPhone, isLoginableViaLine」のいずれかがtrueであれば別のログイン方法を拒否することも可能です。

回答者1
ログインユーザーであれば、そのユーザーがmail, phone, lineのどのフラグを持っているか分かるんですが、今からログインしようとしているログアウト中のユーザーのフラグを確認する方法がない、というのが今の問題かと認識しています。
loginのアクションに、current userの情報で条件分岐しても、その段階ではまだログアウトユーザー(つまりゲストユーザーと同じ)なので判定できないのではないでしょうか?

回答者2
ログイン前には確かに出来ないですね!盲点でした :爆笑:
仮にコードを自由に書けたとしても「ゲストユーザ」を既存のユーザと紐付ける方法は思いつきませんね。
現実的に「複数ログインを許可し、かつログイン方法を限定させる」アプリは見たことがなく、あるとすれば複数ログインを許可する手法が多いです。
どうしてもログイン方法を限定したい、と言うのであればログイン方法ごとにアプリを分けるくらいしかなさそうです…。共有したいリソースだけ3つのアプリで共有させる、のような感じですね…。

回答者1
やはりそうですよね

質問者
とりあえずは下記のようにワークフローを設定します。
サインアップ ソーシャルログイン→ユーザーメソッド作成
ログイン ソーシャルログイン→ログアウトユーザー(メソッドがからの場合)→デリートユーザー
これでとりあえずはソーシャルログインしたユーザーのメソッドがからならログインさせユーザーをデリートします。逆に登録しているユーザーはそのままログインできるとします。
また問題です!現在LINEログインはAuth0を利用していますがAuth0にはユーザーが残ってしまいます、、、

回答者2
Bubble単体では難しいのでZapier等で同時に消すしか無いですね!

参考画像

スクリーンショット 2020-09-07 17.03.48.png