Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook登录后的Firebase和Swift以及当前用户_Swift_Facebook_Firebase - Fatal编程技术网

Facebook登录后的Firebase和Swift以及当前用户

Facebook登录后的Firebase和Swift以及当前用户,swift,facebook,firebase,Swift,Facebook,Firebase,我是新来的斯威夫特和消防基地。我正在尝试构建一个带有facebook登录名的应用程序。我已经实现了一些代码,并试图学习教程,但我并不真正理解如何保存登录和“了解”当前用户数据。因此,我尝试在登录方法中实现此代码并保存用户id NSUserDefaults.standardUserDefaults().setValue(结果[“uid”],forKey:“uid”) 这是: var REF_USER_CURRENT: Firebase { let userID = NSUserDefau

我是新来的斯威夫特和消防基地。我正在尝试构建一个带有facebook登录名的应用程序。我已经实现了一些代码,并试图学习教程,但我并不真正理解如何保存登录和“了解”当前用户数据。因此,我尝试在登录方法中实现此代码并保存用户id
NSUserDefaults.standardUserDefaults().setValue(结果[“uid”],forKey:“uid”)

这是:

 var REF_USER_CURRENT: Firebase {
    let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
    let currentUser = Firebase(url: "\(baseUrl)").childByAppendingPath("users").childByAppendingPath(userID)
    return currentUser!
}
登录后,它将移动到其他视图并显示用户名。我使用此代码检索用户名数据

   func displayName()  {

    FirebaseHelper.fbh.REF_USER_CURRENT.observeEventType(.Value, withBlock: {
        snapshot in
        let currentUser = snapshot.value.objectForKey("name") as! String
        self.currentUsername = currentUser
        self.facebookUserName.text = currentUser as String
        print("Username: \(currentUser)")
        }, withCancelBlock: { error in
            print(error.description)
    })

}
但是,每次我登录时,它都会显示此错误致命错误:在打开可选值时意外发现nil,并突出显示REF\u USER\u CURRENT。我认为原因是它可能无法在NSUserDefault中保存uid。这是我的登录方式

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

    if error != nil{
        print("Facebook login failed. Error \(error)")
    }else if result.isCancelled {
        print("Facebook login was cancelled")
    }else if result.grantedPermissions.contains("email"){
          let accessToken = FBSDKAccessToken.currentAccessToken().tokenString
        FirebaseHelper.fbh.REF_BASE.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in

            if(error != nil){
                print("Login failed. \(error)")
            }else{
                print("Logged in! \(authData)")
                self.saveUserToFirebase(authData)
                print("User Saved Successfully! \(authData.uid)")
                self.processLogin(accessToken, authData: authData)
                let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("profileSetup") as! UIViewController
                self.presentViewController(viewController, animated: true, completion: nil)


            }

        })
    }

}

   func processLogin(accessToken: String, authData: FAuthData) {
    FirebaseHelper.fbh.REF_USER_CURRENT.childByAppendingPath(authData.uid).observeSingleEventOfType(.Value, withBlock: { snapshot in
        if snapshot.value is NSNull {
            print("fail")
        } else {
            print("no")
        }
    })
}


private func createUser(authData: FAuthData!){

    let displayName = authData.providerData["displayName"] as! String
    let email = authData.providerData["email"] as! String
    var imageUrl = ""

    if let url = authData.providerData["profileImageURL"] as? String {
        imageUrl = url
    }

    let request = FBSDKGraphRequest(graphPath: "me/picture", parameters: ["fields": "url", "redirect": false, "type": "large"], HTTPMethod: nil)
    request.startWithCompletionHandler { connection, result, facebookerror in

        if facebookerror != nil{
            print("Graph API Call failed. \(facebookerror)")
        }else{

            //let userData = (result as! NSDictionary).copy()

            let user = ["name": displayName, "email": email,"profilePicUrl": imageUrl]
            FirebaseHelper.fbh.createFirebaseUser(authData.uid, user: user)
            if facebookerror != nil{
                print("Error occured! \(facebookerror)")
            }else{
                print("User Saved Successfully! \(authData.uid) \(displayName)")
                NSUserDefaults.standardUserDefaults().setValue(result ["uid"], forKey: "uid")


            }
            self.facebookLoginBtn.hidden = true
        }
    }

}

我不明白NSUserDaFull如何为当前用户工作,我是否需要在每个页面中编写任何代码来检查当前用户数据以检索数据?请修改我的代码,以便更好地理解此问题。

如果目标是验证用户,并且如果成功,请将他们的登录凭据本地存储在设备上,这非常简单

登录过程因提供商而异(请确保在Firebase仪表板中启用了它),但它们都具有相同的流程

经过身份验证后,authData变量包含有关该特定用户的信息。FAuthData对象的uid属性是唯一标识用户的方式

let email = "dude@thing.com"
let pw = "password"

ref.authUser(email, pw) {
    error, authData in

    if error != nil {
        // eh, something went wrong, handle it

    } else {

       let myAppData = NSUserDefaults.standardUserDefaults()
       myAppData.setValue(auth.uid, forKey: "uid")
       myAppData.setValue(email, forKey: "email")
       myAppData.setValue(pw, forKey: "password")
    }
}
接下来,您可能希望在Firebase中创建一个/users节点,该节点包含有关用户的其他信息

users
  uid_0
   name: "Pete"
   shoe_size: "13"
  uid_1
   name: "Larry"
   shoe_size: "2"
您可以在本节的Firebase指南中找到有关此主题的更多信息,以及示例代码