web-dev-qa-db-fra.com

Comment déconnecter l'utilisateur en utilisant l'authentification Facebook en utilisant Swift et iOS?

J'ai essayé de chercher mais je ne trouve pas la réponse à ma question.

Je joue avec cette application de github: https://github.com/Yalantis/Koloda/tree/master/Example

Je l'utilise parce que je fais un projet qui utilisera le balayage basé sur les tuiles de cette application.

J'utilise également Firebase. Jusqu'à présent, je peux ajouter des utilisateurs à ma base de données, de sorte que l'application et la base de feu sont connectées.

Je souhaite également que les utilisateurs s'inscrivent/se connectent via Facebook.

J'ai connecté mon application à Facebook et un utilisateur peut entrer et se connecter avec succès en utilisant l'authentification Facebook.

Le problème que je rencontre est de me déconnecter.

Lorsque je clique sur le bouton de déconnexion, je souhaite que l'utilisateur soit complètement déconnecté. Il existe donc une méthode de déconnexion fournie avec le SDK Facebook appelée déconnexion. Voici les parties pertinentes de mon code.

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

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

Donc, lorsque je clique sur la déconnexion, puis sur à nouveau sur la connexion, j'obtiens cette page:

http://imgur.com/owi3zZn

Je ne souhaite pas que l'utilisateur reste autorisé après avoir cliqué sur le bouton de déconnexion. Comment faire en sorte que lorsque je clique sur le bouton de déconnexion, l'utilisateur soit complètement déconnecté de Facebook, puis lorsqu'il clique sur le bouton de connexion, il doit saisir à nouveau son nom d'utilisateur/mot de passe?

J'ai essayé de parcourir le webz mais je ne trouve pas de solution à mon problème, même si je suis sûr que c'est quelque chose d'assez simple, j'espère!

Merci pour votre aide et désolé si la mise en forme est mauvaise.

14
Joe

Lorsque vous appelez la déconnexion, l'utilisateur est déconnecté de votre application. Pour ce qui est de les déconnecter de Facebook, je ne pense pas que vous puissiez le faire, ni Facebook ne le permettrait. La première fois qu'un utilisateur autorise votre application via Facebook, Facebook ajoute votre application à la liste des applications avec lesquelles il est autorisé (il peut accéder à cette page via Facebook.com). Lorsqu'ils se déconnecteront et se reconnecteront, ils verront la page dont vous avez publié une photo car ils l'ont déjà autorisée. La seule façon pour eux de se réautoriser est de supprimer l'application de leur page d'application Facebook et de se reconnecter à votre application.

10
Dan Levy

Si vous souhaitez que l'utilisateur se déconnecte de l'application elle-même par programme, vous pouvez vérifier le code suivant.

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

Cela ouvrira la fenêtre de connexion Facebook dans votre application dans laquelle les utilisateurs peuvent se connecter à votre application.

Et pour la déconnexion, vous pouvez appeler:

  let manager = LoginManager()
  manager.logOut()

Cela déconnectera l'utilisateur de Facebook dans l'application, après cela, si vous appelez la méthode de connexion du SDK, vous verrez à nouveau la fenêtre de connexion

Si vous souhaitez effacer le profil et le jeton, appelez également le code ci-dessous avec déconnexion.

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

La façon dont le SDK Facebook actuel gère cela semble être une vulnérabilité de sécurité pour moi. Si j'emprunte un iPad d'amis et que je me connecte à une application avec Facebook lorsque je me déconnecte, je devrais être complètement déconnecté de l'application et du SFSafariViewController qu'il a utilisé pour m'authentifier. Alors qu'en ce moment, il se souvient moi dans le SFSafariViewController en utilisant des cookies.

Pour déconnecter correctement l'utilisateur à la fois du SDK Facebook et de SFSafariViewController, je fais ce qui suit:

    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 )
    }

Je n'aime vraiment pas cette solution mais c'est la meilleure que j'ai pu trouver.

6
ToddH

L'utilisateur Dan L a la bonne réponse, en n de mes commentaires il a écrit:

Oh, je vois ce que tu veux dire. Si vous accédez à l'application safari, vous pouvez accéder à Facebook.com et vous déconnecter de votre compte, vous connecter à un autre compte et revenir dans votre application. L'extension de safari qui apparaît lorsque vous appelez la connexion Facebook devrait montrer le nouvel utilisateur qui s'est connecté!

C'est exactement ce dont j'avais besoin. Merci Dan L.

2
Joe

à partir de vos commentaires, je peux voir ce que vous voulez.

vous pouvez simplement réinitialiser le contenu et les paramètres de votre simulateur:

Cliquez sur simulateur/Réinitialiser le contenu et les paramètres

1
dory daniel