如何使用Swift和iOS使用Facebook身份验证注销用户?

Joe*_*Joe 13 facebook ios facebook-sdk-4.0 swift

我试过四处寻找但我无法找到问题的答案.

我正在玩这个来自github的应用程序:https: //github.com/Yalantis/Koloda/tree/master/Example

我正在使用它,因为我正在做一个项目,它将使用此应用程序中基于磁贴的滑动.

我也在使用firebase.到目前为止,我可以将用户添加到我的数据库,因此应用程序和firebase已连接.

我还希望用户使用facebook注册/登录.

我已将我的应用程序连接到Facebook,用户可以使用facebook身份验证进入并成功登录.

我遇到的问题是退出.

当我点击退出按钮时,我希望用户完全注销.所以有一个名为logout的facebook SDK附带的注销方法.以下是我的代码的相关部分.

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

    facebookLogin.logOut()
    print("loggedout")
    }
Run Code Online (Sandbox Code Playgroud)

因此,当我点击退出然后再次点击登录时,我得到这个页面:

http://imgur.com/owi3zZn

我不希望用户在点击退出按钮后保持授权.我如何做到这一点,当我点击退出按钮时,用户完全从Facebook注销,然后当他们点击登录按钮时,他们必须重新输入他们的用户名/密码?

我试过环顾网页,但找不到我的问题的解决方案,虽然我确信这很简单,我希望!

感谢您的帮助,如果格式不佳,请抱歉.

Har*_*kDG 19

如果您以编程方式让用户从应用程序本身注销,您可以检查以下代码

let loginView : FBSDKLoginManager = FBSDKLoginManager()
loginView.loginBehavior = FBSDKLoginBehavior.Web
Run Code Online (Sandbox Code Playgroud)

这将在您的应用中打开Facebook登录弹出窗口,用户可以在该应用中登录

注销时,您可以拨打电话

let manager = FBSDKLoginManager()
manager.logOut()
Run Code Online (Sandbox Code Playgroud)

这将从应用程序中的facebook注销用户,之后如果您调用SDK的登录方法,您将再次看到登录弹出窗口

如果要清除配置文件和令牌,请在注销时调用以下代码

 FBSDKAccessToken.setCurrentAccessToken(nil)
 FBSDKProfile.setCurrentProfile(nil)
Run Code Online (Sandbox Code Playgroud)


Dan*_*evy 10

当您调用logOut时,用户将退出您的应用程序.至于将它们从Facebook中删除,我认为你不能这样做,Facebook也不会允许它.用户首次通过Facebook授权您应用时,Facebook会将您的应用添加到他们获得授权的应用列表中(他们可以通过Facebook.com访问该页面).当他们再次登录并登录时,他们会看到您发布图片的页面,因为他们已经授权了.他们重新授权的唯一方法是从Facebook应用页面删除该应用并再次登录您的应用.

  • 哦,我明白你的意思了.如果你进入safari应用程序,你可以去Facebook.com注销你的帐户,登录到另一个帐户,然后回到你的应用程序.当您调用Facebook登录时弹出的Safari扩展程序应显示已登录的新用户! (4认同)

Tod*_*ddH 5

当前的Facebook SDK处理此问题的方式对我来说似乎是一个安全漏洞。如果我在注销时借用朋友的iPad并使用Facebook登录到某个应用程序,则应该完全注销该应用程序以及用于验证我身份的SFSafariViewController。现在,它仍然使用cookie在SFSafariViewController中记住了我。

要从Facebook SDK和SFSafariViewController正确注销用户,请执行以下操作:

    let fbLoginManager = FBSDKLoginManager()
    fbLoginManager.logOut()
    let cookies = HTTPCookieStorage.shared
    let facebookCookies = cookies.cookies(for: URL(string: "https://facebook.com/")!)
    for cookie in facebookCookies! {
        cookies.deleteCookie(cookie )
    }
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这种解决方案,但这是我能提出的最好的解决方案。