检查用户是否已登录iOS Swift



我想在appdelegate.swift文件中签入appdelegate.swift文件,如果用户登录显示HomeViewController,例如Instagram,并且如果不显示LoginViewController,则使用mySQL使用mySQL来保存用户数据和PHP桥梁lang

lang lang

appdalegate.swift中的代码

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
         var rootViewController = self.window!.rootViewController
         let isUserLoggedIn:Bool = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
         if(isUserLoggedIn) {
         let mainStoryboard = UIStoryboard(name: "Main" , bundle: nil)
         let protectedPage = mainStoryboard.instantiateViewControllerWithIdentifier("goToHome") as! HomeViewController
         window!.rootViewController = protectedPage
         window!.makeKeyAndVisible()
         }
         else{
         let mainStoryboard = UIStoryboard(name: "Main" , bundle: nil)
         let loginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginview") as! LoginViewController
         window!.rootViewController = loginViewController
         window!.makeKeyAndVisible()

         }

        return true
    }

loginviewcontoler.swift

let success:NSInteger = jsonData.valueForKey("success") as! NSInteger
                        //[jsonData[@"success"] integerValue];
                        NSLog("Success: %ld", success);
                        if(success == 1)
                        {
                            NSLog("Login SUCCESS");
                            let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
                            prefs.setObject(username, forKey: "USERNAME")
                            prefs.setInteger(1, forKey: "ISLOGGEDIN")
                            prefs.synchronize()

                            self.performSegueWithIdentifier("goToHome", sender: self)

profileViewController.swift

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

        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
        let isLoggedIn:Int = prefs.integerForKey("ISLOGGEDIN") as Int

        if (isLoggedIn != 1) {
            self.performSegueWithIdentifier("goto_login", sender: self)
        }
        else
        {
            self.usernameLabel.text = prefs.valueForKey("USERNAME") as? String
        }
    }

抱歉长期问题

在这种情况下不使用nsuserdefaults

https://github.com/matthewpalmer/locksmith

这是使用安全登录/注销的好示例因此,实施后

if let dictionary = Locksmith.loadDataForUserAccount("accaunt")
{
//go to profile
}
 else
{
//go to login
}

遵循步骤: -

步骤1: - 创建custom SplashViewController设置rootviewController SplashViewController
步骤2: - 在SplashViewController上写下登录服务调用
SETP 3: - 当您获得登录成功时,只需更改rootViewController
SETP 4: - 在AppDelegate中为重定向HomescreenrootViewController编写一种方法。
SETP 5: - 调用AppDelegate的方法,转到Homescreen

您必须做一些工作。1.您必须确保用户已登录。要在按下按钮(登录按钮)使用UserDefaults

时执行此操作。
let userDefault = UserDefaults.standard
userDefault.set(true, forKey: "isLoggedIn")
userDefault.synchronize()

2.当用户再次启动应用程序时,只需检查用户是否登录了ViewDidappear Method/viewDidload(这是您选择的哪种方法。大多数时候我使用ViewDidAppear)

let userDefault = UserDefaults.standard
let savedData = userDefault.bool(forKey: "isLoggedIn")
if(savedData){
  performSegue(withIdentifier: "segueTest", sender:nil)//here u have decide the which view will show if the user is logged in how. here i used   segue.
}else{
   viewController = self// this is the main view. just make the object of the class and called it.
}

我希望您知道如何准备segue

只是做同样事情的一种简洁的方式:

func checkIfUserIsLoggedIn() {
    if Auth.auth().currentUser == nil {
        DispatchQueue.main.async {
            // present login controller
            let loginVC = LoginVC()
            let navController = UINavigationController(rootViewController: loginVC)
            self.present(navController, animated: true, completion: nil)
        }
        return
    }
}

最新更新