将 Facebook 登录与 Parse 集成
Posted
技术标签:
【中文标题】将 Facebook 登录与 Parse 集成【英文标题】:Integrate Facebook Login with Parse 【发布时间】:2017-08-10 22:41:50 【问题描述】:在我的 Xcode 项目中,我已经有了一个使用他们创建的用户用户名和密码的登录功能。现在我想在项目中集成一个 Facebook 登录。我能够用 Facebook 编写简单的注册,它将项目连接到他们的 Facebook。在这一步之后,我被两个问题难住了:
要通过 Facebook 注册用户,我需要保存某种形式的唯一标识,以便他们在登录时可以再次使用它。但我不知道这个标识是什么或从哪里得到的。
我只知道如何通过我在解析中保存的用户名和密码登录用户以访问他们的个人资料。这如何与 Facebook 配合使用?
谁能帮我解决这两个问题?
我已经复制了我的 Facebook 登录代码:
@IBOutlet var facebookSignUpButton: FBSDKLoginButton!
var fullnameFB = String()
var emailFB = String()
var isFBSignUp = Bool()
override func viewDidLoad()
super.viewDidLoad()
signUpWithFacebook()
//
// Facebook Sign Up Functions =>
//
func signUpWithFacebook()
facebookSignUpButton.readPermissions = ["email", "public_profile"]
facebookSignUpButton.delegate = self
self.view.addSubview(facebookSignUpButton)
//what to do when logged in
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
if error != nil //if theres an error
print(error)
else if result.isCancelled // if user cancels the sign up request
print("user cancelled login")
else
if result.grantedPermissions.contains("email")
if let graphRequest = FBSDKGraphRequest(graphpath: "me", parameters: ["fields": "email, name"])
graphRequest.start(completionHandler: (connection, result, error) in
if error != nil
print(error?.localizedDescription ?? String())
else
if let userDetails = result as? [String: String]
print(userDetails)
self.fullnameFB = userDetails["name"]!
self.emailFB = userDetails["email"]!
self.isFBSignUp = true
self.performSegue(withIdentifier: "SignUpP2VC", sender: nil)
)
else
print("didnt get email")
createAlert(title: "Facebook Sign Up", message: "To signup with Facebook, we need your email address")
//logout function
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!)
print("logged out")
【问题讨论】:
【参考方案1】:如果您使用 Parse,则有一个名为 PFFacebookUtils 的帮助程序库来处理用户链接
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
if error != nil //if theres an error
print(error)
else if result.isCancelled // if user cancels the sign up request
print("user cancelled login")
else
// TODO: guard against nil => result?.token
PFFacebookUtils.logInInBackground(with: result!.token!) (user, error) in
if let user = user
if user.isNew
print("User signed up and logged in through Facebook!")
else
print("User logged in through Facebook!")
// Get user email using FBSDKGraphRequest
else
print("Error while trying to login using Facebook: \(error?.localizedDescription ?? "---")")
【讨论】:
我应该从他们的 Facebook 个人资料中保存哪个/什么唯一标识,这样我就知道在他们使用 Facebook 登录时应该设置哪个帐户。截至目前,人们输入他们的用户名和密码登录并基于用户名我可以调出他们的个人资料。但如果他们使用 Facebook 登录,我将没有初始用户名。 我应该保存什么? 配置文件是指 Parse 中的用户?使用PFFacebookUtils.logInInBackground
后,如有必要,库将在用户表中创建一个新行。从那里您可以访问所有用户的详细信息。如果您确实需要用户名,可以向用户询问昵称。
PFFacebookUtils.logInInBackground
返回的用户变量是PFUser?
。您不需要用户名,但如果您的应用需要,则需要输入昵称(用户名由 Parse 在使用 3rd 方身份验证服务时自动生成)。
我尝试实现PFFacebookUtils
,但收到错误“使用未解析的标识符'PFFacebookUtils'”。在这个视图控制器中,我导入了 FBSDKCoreKit 和 FBSDKLoginKit。我还缺少什么?
您没有正确集成库。按照github.com/parse-community/… 中描述的步骤操作以上是关于将 Facebook 登录与 Parse 集成的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Facebook + Swift + Parse 获取封面照片
将 Spring Security 与 Facebook 登录集成
在 Swift 中使用 Parse 使用 FB 登录的用户持久性