質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3610閲覧

firebaseで複数のSNS認証をリンクする (iOS)

kazy1981

総合スコア44

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/01/31 14:53

お世話になります。

###前提
iOSアプリをswiftで作っております。SNS(facebook, twitter, google)での個別のログインは出来るようになりました。
(こちらなど、firebaseの公式ドキュメントを参照しました)

同じくこちらの公式ドキュメントで、複数のSNSログインを相互リンクすることをしたいと考えております。

一応、公式ドキュメント通りに行うことで、例えばfacebookとgoogleのログインのリンクを行うことはできました。

###問題点
上記のリンクは”手動”で行っております。つまり、すでにgoogleアカウントでログイン認証がfirebaseに渡されているユーザーに対して、以下のコードを実行することで、facebookログインとリンクしました。

//FBトークンをクレデンシャルに入れる let credential = FIRFacebookAuthProvider.credential(withAccessToken: (result?.token.tokenString)!) //現在のユーザー( googleログインはすでにfirebaseに認証が渡されている)を上記のfacebook認証とリンクさせる FIRAuth.auth()?.currentUser?.link(with: credential){(user,error) in if (error != nil){ print("facebookに既存認証をリンクするところでエラー!error:\(error)") } }

ただしこれでは明らかに不便で、実際にはユーザーは、facebook/twitter/googleのどれに最初にログインしてくれるかわからないので、すでにこれら3つの中でfirebaseにログイン認証を渡しているかの判断分岐をいれる必要があると思っておりますが、その方法がわかりません。

おそらく、かなり基本的なことで、firebase公式にも書いてないのだと思いますが。。

なお、上記例で、すでにgoogleログインがすでに現在時点で行われているかはもちろんわかるのですが、「過去にgoogleログインされて、よってfirebaseに認証情報を渡されたことがあるものの、今現在は当該googleログインはログアウトされているユーザーがfacebookログインしようとするとき」の判定したい、という趣旨です。

わかりにくくて恐縮ですが、先人の方のお知恵を拝借できればと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

失礼いたしました、自己解決いたしました。公式の通り(https://firebase.google.com/docs/auth/ios/manage-users)以下でprovidersにtwitter.comとかfacebook.comとかの情報取得でき、それで判別可能でした。

var providers: [String] = []
//既存プロバイダー情報の取得
if let user = FIRAuth.auth()?.currentUser {
for profile in user.providerData{
providers.append(profile.providerID)
}
}

投稿2017/02/01 23:40

kazy1981

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問