在IOS中检查用户是否登录

时间:2014-03-29 05:22:22

标签: ios5

我正在制作一个IOS应用程序,其中我为注册用户提供了一些额外的东西,所以我做了登录表单,它工作得很好但每次我运行模拟器我都必须登录所以我只想问我怎么能存储登录用户,当注册用户第一次登录时,登录页面打开但登录后用户关闭他们的应用程序并再次运行,然后从登录页面打开下一页。

4 个答案:

答案 0 :(得分:1)

使用NSUserDefaults存储标志变量以检查登录状态

答案 1 :(得分:1)

保存用户名和密码我个人建议使用Keychain ,因为它们在安全性方面比NSUserDefault更安全,因为Keychain以加密形式存储数据,而NSUserDefault以纯文本形式存储。如果你仍然想使用NSUserDefault这就是

//创建standardUserDefaults变量

NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];

//保存NSString

[standardUserDefaults setObject:@"YES" forKey:@"Login"];

[standardUserDefaults synchronize];

//检查登录 //创建一个standardUserDefaults变量

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

//获取NSString对象

NSString *Isallowed = [standardUserDefaults stringForKey:@"Login"];
if(Isallowed == @"YES"){
   // Process for login
}
else
{
}

答案 2 :(得分:0)

// create a standardUserDefaults variable
NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];

// saving an NSString
[standardUserDefaults setObject:@"YES" forKey:@"Login"];

[standardUserDefaults synchronize];

//Check For Login
// create a standardUserDefaults variable
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

// getting an NSString object
NSString *Isallowed = [standardUserDefaults stringForKey:@"Login"];
if(Isallowed == @"YES"){
   // Process for login
}
else
{
   // Alert them for Not login
}

答案 3 :(得分:0)

我会给你一个全面的答案。

不要使用NSUserDefaults并且不存储密码这是一个糟糕的解决方案

NSUserDefaults数据未加密,可能会导致安全问题。

让我们创建一个结构化的用户类

当用户登录时,您需要确保您可以访问整个应用中的用户数据,以便在需要时可以在任何屏幕上获取数据。

为实现这一目标,我们需要建立一个很好的结构来正确组织它。请记住,当前用户和其他用户都是“用户”,因此我们将使用相同的类。

创建一个类并将其命名为“EDUser”(如果需要,可以选择其他名称) 该类将包含用户信息(当前用户或其他用户) 更重要的是,这个类将具有记录用户的能力。

这是一个类似于什么的图片:

class EDUser {
    var firstName: String
    var lastName: String?
    var birthDate: NSDate?

    init(firstName: String, lastName: String?, birthDate: NSDate?) {
        self.firstName = firstName
        self.lastName = lastName
        self.birthDate = birthDate
    }
}

// MARK: - Accessor

extension EDUser {
    class var currentUser: EDUser? {
        get {
            return loadCurrentUserFromDisk()
        }
        set {
            saveCurrentUserToDiskWithUser(newValue)
        }
    }
}

// MARK: - Log in and out

extension EDUser {
    class func loginWithUsername(username: String,
                           andPassword password: String,
                           callback: (EDUser?, NSError) -> Void) {
        // Access the web API
        var parameters = [
            "username": username,
            "password": password
        ]
        YourNetworkingLibrary.request(.POST,
                          "https://api.yourwebsite.com/login",
                          parameters: parameters).responseJSON { 
            response in

            if response.statusCode == .Success {
                let user = EDUser(firstName: response["firstName"],
                       lastName: response["lastName"],
                       birthDate: NSDate.dateFromString(response["birthDate"]))
                currentUser = user
                callback(currentUser, nil)
            } else {
                callback(nil, yourError)
            }
        }
    }

    class func logout() {
        deleteCurrentUserFromDisk()
    }
}

// MARK: - Data

extension EDUser {
    class private func saveCurrentUserToDiskWithUser(user: EDUser) {
        // In this process, you encode the user to file and store it
    }

    class private func loadCurrentUserFromDisk() -> EDUser? {
        // In this process, you get the file and decode that to EDUser object
        // This function will return nil if the file is not exist
    }

    class private func deleteCurrentUserFromDisk() {
        // This will delete the current user file from disk
    }
}

// MARK: - Helper

extension NSDate {
    class func dateFromString(string: String) -> NSDate {
        // convert string into NSDate
    }
}

用例

现在一切就绪,我们可以像这样使用它

进程中无阻塞登录

EDUser.loginWithUsername(username: "edward@domain.com",
                         password: "1234") {
    user, error in

    if error == nil {
        // Login succeeded
    } else {
        // Login failed
    }
}

退出

EDUser.logout()

检查用户是否已登录

if EDUser.currentUser != nil {
    // The user is logged in
} else {
    // No user logged in
    // Show the login screen here
}

在任何屏幕上获取当前用户数据

if let currentUser = EDUser.currentUser {
    // do something with current user data
}

将其他用户存储为对象

let user = EDUser(firstName: "Edward",
                  lastName: "Anthony",
                  birthDate: NSDate())