Xcode iOS:检查用户是否已登录并显示不同的视图[英] Xcode iOS: check if user is logged in and show different views if not

本文是小编为大家收集整理的关于Xcode iOS:检查用户是否已登录并显示不同的视图的处理方法,想解了Xcode iOS:检查用户是否已登录并显示不同的视图的问题怎么解决?Xcode iOS:检查用户是否已登录并显示不同的视图问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在编码一个应用程序,其中登录用户有多个额外的功能,而不是未登录的用户.基本上,我有更多或更少的5个标签.当我启动应用程序时,用户立即获取登录页面.他可以决定跳过它.如果他跳过它,那么他只会有3个标签.如果他成功登录,那么5.

我已经制作了我的登录页面.我只是不知道如何存储会话,如果用户被正确登录,如果用户不是,只显示特定数量的选项卡.我来自PHP,我刚刚开始学习Objective-C,所以我正在寻找与PHP中的$ _Session一样的东西,或多或少.

SO:如果用户登录,存储会话,并显示所有选项卡.如果他没有,只能显示有限数量的标签. 我该如何接近这个?

在存储会话方面,我假设用户名和密码足够.

如果您使用它,您可以将用户名存储在NsuserDefaults或Coredata中.使用keychain存储密码是最好的. sskeychain 使其很容易.

[SSKeychain setPassword:password forService:myAppName account:userName]

您可以存储它们在内存中登录的事实,但在App Relaunch Check your:

NSString *password = [SSKeychain passwordForService:myAppName account:userName];
if (password != nil)
{
    // Logged in
}

如果用户注销,请轻松删除钥匙串中的密码

[SSKeychain deletePasswordForService:myAppName account:userName]

其他推荐答案

会话处理在使用nsurlconnection时自动完成,因此您可以将用户数据存储在服务器上的Sesssion中.

您可能想要寻找的是称为单身设计模式(有些人拒绝它,但它可能非常方便).您所做的是创建一个对象在代码中的各处.在此对象中,您例如存储一个BOOL,指示用户是否已登录.例如: (我没有跑这个,只是为了得到这个想法)

Mananger myManager* = [Manager sharedManager];
if(myManager.loggedIn){
    //Show 5 tabs
}else{
    //Show 3 Tabs
}

此代码可以在每个类中使用,以便您始终可以访问用户的数据.在这种情况下,经理将是一个单独的类,提供单例功能.查看如何在这里制作一个: http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/

其他推荐答案

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

不要使用nsuserdefault作为会话,这是一个不好的解决方案

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())

本文地址:https://www.itbaoku.cn/post/924373.html