Facebook登录塞格加载,然后返回登录屏幕

问题描述:

所以我创建了使用Parse和Swift的登录/注册功能。 Facebook成功登录后,我想要看到的视图控制器会短暂弹出,但SignIn视图控制器会回到屏幕上。我希望用户能够登录并可以访问该应用程序。为什么是这样?Facebook登录塞格加载,然后返回登录屏幕

下面是我的两个视图控制器的代码。我有一个如下图所示的segges设置故事板。

fbSignIn - 网友实拍在Segue公司

goSignIn - 签到页Segue公司

主视图控制器(视图控制器我想去的Facebook登录后)

class MainViewController: UIViewController { 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 

    if PFUser.currentUser() != nil { 

    } else { 

// take user to SignInViewController through a custom segue 
self.performSegueWithIdentifier("goSignIn", sender: self) 
} 

} 

@IBAction func logOutUser(sender: UIButton) { 

    PFUser.logOut() 
    self.performSegueWithIdentifier("goSignIn", sender: self) 

} 

登录视图控制器(登录和Facebook登录按钮)

@IBAction func didTapFacebookConnect(sender: AnyObject) { 
    let permissions = [ "public_profile", "email", "user_friends" ] 

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { 
     (user: PFUser?, error: NSError?) -> Void in 
     if let user = user { 
      if user.isNew { 

       print ("User signed up and logged in through Facebook!") 
       self.performSegueWithIdentifier("fbSignIn", sender: self) 


      } else { 
       print ("User logged in through Facebook!") 
       self.performSegueWithIdentifier("fbSignIn", sender: self) 
      } 
     } else { 
      print ("Uh oh. The user cancelled the Facebook login.") 
      self.performSegueWithIdentifier("fbSignIn", sender: self) 
     } 

你顺着接下去你的Facebook登录页面上在主视图 - 控制一个viewDidAppear方法。您描述的行为表明PFUser.currentUser()nil,所以self.performSegueWithIdentifier("goSignIn", sender: self)在您的主视图控制器出现时在viewDidAppear中执行,并且您立即返回登录页面。

+0

我需要这个,所以当用户打开应用程序时,它会检查它们是否已登录,如果不是,则会将它们发送到登录页面。有没有什么方法可以改变它,以便它不影响我的Facebook登录? –

+0

就你所描述的行为而言,就我看到的代码而言,当你有一个Facebook登录失败时,可能会发生这种情况,这意味着'PFUser.currentUser()'为零。即使您的登录尝试失败,您也可以对主要的视图控制器执行Segue,最终将您带回登录页面。为什么不只是在用户登录失败时显示警报并保留在登录视图控制器中? –

+0

登录成功时不会发生。当使用Facebook成功登录后,主视图控制器弹出,然后返回登录视图控制器。我希望它保持在主视图控制器上。 –