web-dev-qa-db-ja.com

SwiftおよびiOSを使用してFacebook認証を使用してユーザーをログアウトする方法

探してみましたが、質問の答えが見つかりません。

私はgithubからこのアプリケーションをいじっています: https://github.com/Yalantis/Koloda/tree/master/Example

このアプリケーションからタイルベースのスワイプを使用するプロジェクトを実行しているので、それを使用しています。

また、firebaseを使用しています。これまでのところ、データベースにユーザーを追加できるので、アプリとFirebaseが接続されています。

また、facebookを使用してユーザーに登録/ログインしてもらいます。

アプリをFacebookに接続しました。ユーザーはFacebookの認証を使用してアクセスし、正常にログインできます。

私が抱えている問題はログアウトです。

ログアウトボタンをクリックすると、ユーザーは完全にログアウトされます。したがって、ログアウトと呼ばれるFacebook SDKに付属するログアウトメソッドがあります。これが私のコードの関連部分です。

import FBSDKLoginKit
@IBAction func handleLogout(sender: AnyObject) {

    facebookLogin.logOut()
    print("loggedout")
    }

したがって、ログアウトをクリックしてからもう一度ログインをクリックすると、このページが表示されます。

http://imgur.com/owi3zZn

ユーザーがログアウトボタンをクリックした後も認証されたままにしたくない。ログアウトボタンをクリックしたときにユーザーがFacebookから完全にログアウトし、ログインボタンをクリックしたときにユーザー名/パスワードを再入力するようにするにはどうすればよいですか?

私はwebzを見回してみましたが、私の問題の解決策を見つけることができませんが、それはかなり単純なものだと確信していますが、私は願っています!

フォーマットに問題がある場合は、ご協力いただきありがとうございます。

14
Joe

LogOutを呼び出すと、ユーザーはアプリからログアウトされます。それらをFacebookからログアウトする限り、私はあなたがそれを行うことができるとは思いませんし、Facebookがそれを許可することもありません。ユーザーが初めてFacebookを介してアプリを承認すると、Facebookは、承認されているアプリのリストにアプリを追加します(Facebook.comを介してそのページにアクセスできます)。彼らが再びログアウトしてログインすると、彼らはすでに承認しているため、あなたが写真を投稿したページが表示されます。彼らが自分自身を再認証する唯一の方法は、Facebookアプリのページからアプリを削除して、再度アプリにログインすることです。

10
Dan Levy

ユーザーがプログラムからアプリ自体からログアウトするようにする場合は、次のコードを確認できます。

let loginView : LoginManager = LoginManager()
loginView.loginBehavior = FBSDKLoginBehavior.Web

これにより、アプリにFacebookログインポップアップが開き、ユーザーがアプリにログインできます。

そして、ログアウトのために、あなたは呼び出すことができます:

  let manager = LoginManager()
  manager.logOut()

これにより、アプリのFacebookからユーザーがログアウトされます。この後、SDKのログインメソッドを呼び出すと、ログインポップアップが再び表示されます。

プロファイルとトークンをクリアしたい場合は、ログアウトして以下のコードも呼び出します。

 FBSDKAccessToken.setCurrentAccessToken(nil)
 FBSDKProfile.setCurrentProfile(nil)
20
HardikDG

現在のFacebook SDKがこれを処理する方法は、私にとってセキュリティの脆弱性のようです。友人のiPadを借りてFacebookでアプリにログインすると、ログアウトしたときに、アプリと、認証に使用されたSFSafariViewControllerから完全にログアウトする必要があります。それに対して、現在はremembers私はSFSafariViewControllerでcookieを使用しています。

Facebook SDKとSFSafariViewControllerの両方からユーザーを適切にログアウトするには、次のようにします。

    let fbLoginManager = LoginManager()
    fbLoginManager.logOut()
    let cookies = HTTPCookieStorage.shared
    let facebookCookies = cookies.cookies(for: URL(string: "https://facebook.com/")!)
    for cookie in facebookCookies! {
        cookies.deleteCookie(cookie )
    }

このソリューションは本当に嫌いですが、思いついた中で最高です。

6
ToddH

ユーザーDan Lの正解は 私のコメントの1つ です。

ああ、私はあなたが何を意味するのかわかります。 Safariアプリにアクセスすると、Facebook.comにアクセスしてアカウントからログアウトし、別のアカウントにログインして、アプリに戻ることができます。 Facebookログインを呼び出すとポップアップするsafari拡張機能は、ログインした新しいユーザーを表示するはずです!

これはまさに私が必要としたものです。ダン・Lさん、ありがとうございます。

2
Joe

あなたのコメントから私はあなたが望むものを見ることができます。

シミュレータのコンテンツと設定をリセットできます:

クリックシミュレーター/コンテンツと設定をリセット

1
dory daniel