如何使用 Swift 和 iOS 使用 Facebook 身份验证注销用户?
How to logout user using Facebook authentication using Swift and iOS?
我已经尝试四处搜索,但找不到问题的答案。
我正在使用来自 github 的这个应用程序:
https://github.com/Yalantis/Koloda/tree/master/Example
我使用它是因为我正在做一个项目,该项目将使用此应用程序中基于图块的滑动。
我也在使用 Firebase。到目前为止,我可以将用户添加到我的数据库中,因此应用程序和 firebase 已连接。
我也希望用户 register/login 使用 facebook。
我已将我的应用程序连接到 facebook,用户可以进入并使用 facebook 身份验证成功登录。
我遇到的问题是注销。
当我点击注销按钮时,我希望用户完全注销。于是就有了facebook SDK自带的注销方法叫logout。
这是我的代码的相关部分。
import FBSDKLoginKit
@IBAction func handleLogout(sender: AnyObject) {
facebookLogin.logOut()
print("loggedout")
}
所以当我点击注销然后再次点击登录时,我得到这个页面:
我不希望用户在单击注销按钮后仍保持授权状态。我该如何做到这一点,以便当我单击注销按钮时,用户完全从 Facebook 注销,然后当他们单击登录按钮时,他们必须重新输入 username/password?
我尝试在 webz 上四处寻找,但找不到解决我的问题的方法,但我希望这很简单!
感谢您的帮助,如果格式不正确,我们深表歉意。
当您调用 logOut 时,用户会退出您的应用程序。至于让他们退出 Facebook,我认为你不能这样做,Facebook 也不会允许这样做。用户第一次通过 Facebook 授权您的应用程序时,Facebook 会将您的应用程序添加到他们获得授权的应用程序列表中(他们可以通过 Facebook.com 访问该页面)。当他们注销并再次登录时,他们将看到您张贴图片的页面,因为他们已经授权了。他们重新授权自己的唯一方法是从他们的 Facebook 应用程序页面删除该应用程序,然后重新登录您的应用程序。
用户 Dan L 给出了正确答案,他在 中写道:
Oh, I see what you mean. If you go into the safari app, you can go Facebook.com and logout of your account, login to a different account, and go back into your app. The safari extension the pops up when you call the Facebook login should show the new user that logged in!
这正是我所需要的。谢谢 Dan L.
如果您要让用户以编程方式退出应用程序本身,您可以检查以下代码。
let loginView : LoginManager = LoginManager()
loginView.loginBehavior = FBSDKLoginBehavior.Web
这将在您的应用程序中打开 Facebook 登录弹出窗口,用户可以在其中登录您的应用程序。
对于注销,您可以调用:
let manager = LoginManager()
manager.logOut()
这将在应用程序中从 facebook 注销用户,此后如果您调用 SDK 的登录方法,您将再次看到登录弹出窗口
如果你想清除配置文件和令牌,也可以调用以下代码并注销。
FBSDKAccessToken.setCurrentAccessToken(nil)
FBSDKProfile.setCurrentProfile(nil)
从你的评论中我知道你想要什么。
您只需重置模拟器的内容和设置即可:
点击模拟器/重置内容和设置
当前 Facebook SDK 处理此问题的方式对我来说似乎是一个安全漏洞。如果我借用朋友 iPad 并在注销时使用 Facebook 登录应用程序,我应该完全退出该应用程序和它用来验证我身份的 SFSafariViewController。而现在它仍然记得我在 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 )
}
我真的不喜欢这个解决方案,但这是我能想到的最好的解决方案。
我已经尝试四处搜索,但找不到问题的答案。
我正在使用来自 github 的这个应用程序: https://github.com/Yalantis/Koloda/tree/master/Example
我使用它是因为我正在做一个项目,该项目将使用此应用程序中基于图块的滑动。
我也在使用 Firebase。到目前为止,我可以将用户添加到我的数据库中,因此应用程序和 firebase 已连接。
我也希望用户 register/login 使用 facebook。
我已将我的应用程序连接到 facebook,用户可以进入并使用 facebook 身份验证成功登录。
我遇到的问题是注销。
当我点击注销按钮时,我希望用户完全注销。于是就有了facebook SDK自带的注销方法叫logout。 这是我的代码的相关部分。
import FBSDKLoginKit
@IBAction func handleLogout(sender: AnyObject) {
facebookLogin.logOut()
print("loggedout")
}
所以当我点击注销然后再次点击登录时,我得到这个页面:
我不希望用户在单击注销按钮后仍保持授权状态。我该如何做到这一点,以便当我单击注销按钮时,用户完全从 Facebook 注销,然后当他们单击登录按钮时,他们必须重新输入 username/password?
我尝试在 webz 上四处寻找,但找不到解决我的问题的方法,但我希望这很简单!
感谢您的帮助,如果格式不正确,我们深表歉意。
当您调用 logOut 时,用户会退出您的应用程序。至于让他们退出 Facebook,我认为你不能这样做,Facebook 也不会允许这样做。用户第一次通过 Facebook 授权您的应用程序时,Facebook 会将您的应用程序添加到他们获得授权的应用程序列表中(他们可以通过 Facebook.com 访问该页面)。当他们注销并再次登录时,他们将看到您张贴图片的页面,因为他们已经授权了。他们重新授权自己的唯一方法是从他们的 Facebook 应用程序页面删除该应用程序,然后重新登录您的应用程序。
用户 Dan L 给出了正确答案,他在
Oh, I see what you mean. If you go into the safari app, you can go Facebook.com and logout of your account, login to a different account, and go back into your app. The safari extension the pops up when you call the Facebook login should show the new user that logged in!
这正是我所需要的。谢谢 Dan L.
如果您要让用户以编程方式退出应用程序本身,您可以检查以下代码。
let loginView : LoginManager = LoginManager()
loginView.loginBehavior = FBSDKLoginBehavior.Web
这将在您的应用程序中打开 Facebook 登录弹出窗口,用户可以在其中登录您的应用程序。
对于注销,您可以调用:
let manager = LoginManager()
manager.logOut()
这将在应用程序中从 facebook 注销用户,此后如果您调用 SDK 的登录方法,您将再次看到登录弹出窗口
如果你想清除配置文件和令牌,也可以调用以下代码并注销。
FBSDKAccessToken.setCurrentAccessToken(nil)
FBSDKProfile.setCurrentProfile(nil)
从你的评论中我知道你想要什么。
您只需重置模拟器的内容和设置即可:
点击模拟器/重置内容和设置
当前 Facebook SDK 处理此问题的方式对我来说似乎是一个安全漏洞。如果我借用朋友 iPad 并在注销时使用 Facebook 登录应用程序,我应该完全退出该应用程序和它用来验证我身份的 SFSafariViewController。而现在它仍然记得我在 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 )
}
我真的不喜欢这个解决方案,但这是我能想到的最好的解决方案。