如何使用 UserDefaults 保存已登录状态?

Posted

技术标签:

【中文标题】如何使用 UserDefaults 保存已登录状态?【英文标题】:How to user UserDefaults to Save Logged in state? 【发布时间】:2017-09-14 03:15:47 【问题描述】:

我正在 swift 4 中介绍我的应用程序,但我遇到了一个问题。我有一个 introController 和 HomeController 视图,根视图是 introController 所以我想如果用户从 introControll 登录到 HomeController,那么每当用户打开应用程序时,第一个视图出现的是 HomController,(他们不需要再次登录)。

我考虑了 userDefaults 中的商店登录状态,我不希望我的应用使用导航,知道吗?请帮忙

提前致谢

【问题讨论】:

您可以在 userDefaults 中存储一个 bool 变量,每次他们打开应用程序时,检查变量是否为真。如果是真的,将用户移动到家庭控制器 【参考方案1】:

当您登录时保存任何 bool 值,如下所示:

UserDefaults.standard.set("1", forKey: "isLogin")

在 appdelegate 中检查登录状态如下:

if UserDefaults.standard.value(forKey: "isLogin") != nil
            //Navigate to homeviewcontroller
 else
            //Navigate to rootviewcontroller
  

【讨论】:

谢谢,但是你能在 appdelegate 中显示一些详细的代码吗? 这不是布尔值,您使用键“isLogin”保存字符串“1”【参考方案2】:

很简单

当用户成功登录时,您需要在 UserDefaults 中保存状态:[Swift 3, 4]

/// call if user logged in
func saveLoggedState() 

    let def = UserDefaults.standard
    def.set(true, forKey: "is_authenticated") // save true flag to UserDefaults
    def.synchronize()


然后在 AppDelegate 中的 didFinishLaunchingWithOptions 之前返回 true

let def = UserDefaults.standard
let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value

if is_authenticated 
    // user logged in
    let homeController = HomeController() // create instance of HomeController or from Storyboard

    window?.rootViewController = homeController // change rootViewController to HomeController
    window?.makeKeyAndVisible() // show window

【讨论】:

didFinishLaunchingWithOptions 仅在应用程序的初始启动期间被调用,因此除非他们从托盘中删除应用程序然后重新启动它,否则不会有任何用户身份验证。 是的,我知道,所以提问者需要在用户登录时调用 saveLoggedState 一次,以便下次运行应用程序时,它会直接打开 HomeController...我理解他下次运行的问题 原始问题只是说他希望它在用户“打开应用程序”时验证用户。所以可能只是从不活动中恢复过来。 那么,有什么问题?当应用程序从后台返回时,应用程序不会调用 didFinishLaunchingWithOptions 并且会在进入后台之前返回到应用程序的最后一个状态,因此不需要在这里处理经过身份验证的状态......我们只需要通过在 didFinishLaunchingWithOptions 中实现我们的登录来处理应用程序的首次运行 欢迎,如果一切正常,请批准答案为已接受

以上是关于如何使用 UserDefaults 保存已登录状态?的主要内容,如果未能解决你的问题,请参考以下文章

userdefaults 不保存按钮状态

Swift 3 - UserDefaults 无缘无故自动清除

在 Userdefaults 中保存状态

如何在 Xcode 9.2 中的应用程序构建中保存登录凭据

UserDefaults 自动登录问题

如果 UserDefaults 为空,如何检查一次