Swift 如何使用复选框保护用户登录会话 "Remember Me"

Swift how to safe user login session with checkbox "Remember Me"

我有一个关于我开发的应用程序的问题,在我的登录屏幕上我有这个复选框,当用户选中该复选框时,他的用户名(或者在我的情况下他的 phone 登录号码)将自动在文本字段中安全,如果用户注销,他的 phone 号码将自动填充到文本字段中。

如果用户不选中该框,他的 phone 号码将不会在用户会话中安全,因此当用户注销时,他的 phone 号码将不会填写登录文本字段。

该复选框用于“记住我”,当用户选中该框时,它将记住用户 phone 号码,如果不选中该框,则不会记住下一个用户 phone用户登录时间。

知道伙计们怎么样了吗?

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    
    rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
    checkBoxBtn.addTarget(self, action: #selector(toggleCheckBox(_:)), for: .valueChanged)

    checkBoxBtn.isSelected = rememberMeFlag

    if rememberMeFlag {
        let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
        textPhoneNumber.text = save_session!.substring(from: 1)
    }

    textPhoneNumber.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

}

@IBAction func toggleCheckBox(_ sender: UIButton) {
    
    if sender.isSelected == true {
        checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
        sender.isSelected = false
    }else{
        checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
        sender.isSelected = true
    }
    
}


//this code is for user session
if FIRST_BOOT {
        print("first boot")
        if let save_session = UserDefaults.standard.string(forKey: "USER_FULLNAME") {
            USER_FULLNAME = save_session
        }
        if let save_session = UserDefaults.standard.string(forKey: "SESSION_TOKEN") {
            SESSION_TOKEN = save_session
        }
        if let save_session = UserDefaults.standard.string(forKey: "USER_PIN") {
            USER_PIN = save_session
        }
        if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE") {
            USER_TELEPHONE = save_session
        }
       
        if let save_session = UserDefaults.standard.string(forKey: "IDENTITY_NUMBER") {
            IDENTITY_NUMBER = save_session
        }
        
        if let _ = UserDefaults.standard.string(forKey: "WIZARD") {
            // Wizard has opened
        } else {
            //performSegue(withIdentifier: "loginToWizard", sender: nil)
            
            //return
        }



  //i use that code to put the user phone num into the textfield
if let save_session = UserDefaults.standard.string(forKey: "USER_TELEPHONE_CACHED") {
        textPhoneNumber.text = save_session.substring(from: 1)
    }
  
  

谁能告诉我如何做我想做的事?我只想将该用户会话放在复选框功能中,但在那之后我只看到了很多错误,我询问如何执行此操作的步骤,导致我有点困惑,即使它看起来并不那么困难......谢谢伙计们。

我建议如下:

  • 当用户选中或取消选中“记住我”时,更新实例变量rememberMeFlag并将此信息存储在用户默认值中
  • 当用户编辑电话文本字段且rememberMeFlagtrue时,将内容保存到用户默认值
  • 加载视图时,从用户默认值中读取值并更新 rememberMeFlag、复选框和文本字段

因此代码可能如下所示:

class X: UIViewController {
    
    private var rememberMeFlag = false
    @IBOutlet weak var rememberMeSwitch:UISwitch!
    @IBOutlet weak var telephoneTextField:UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        rememberMeFlag = UserDefaults.standard.bool(forKey: "REMEMBER_USER")
        rememberMeSwitch.isOn = rememberMeFlag
        
        if rememberMeFlag {
            let tel = UserDefaults.standard.string(forKey: "USER_TELEPHONE")
            telephoneTextField.text = tel
        }
        
        // connect actions; do this in code like here
        // or use outlet connections from the storyboard
        telephoneTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
        rememberMeSwitch.addTarget(self, action: #selector(valueChanged(_:)), for: .valueChanged)
    }
    
    @IBAction func toggleCheckBox(_ sender: UIButton) {
        rememberMeFlag = !rememberMeFlag
        UserDefaults.standard.set(rememberMeFlag, forKey: "REMEMBER_USER")

        if rememberMeFlag == true {
            checkBoxBtn.setImage(UIImage(named: "Checked-1"), for: .normal)
            let text = telephoneTextField.text
            UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
        } else {
            checkBoxBtn.setImage(UIImage(named: "unCheck"), for: .normal)
            UserDefaults.standard.removeObject(forKey: "USER_TELEPHONE")
        }   
    }

    @objc func textFieldDidChange(_ sender: UITextField){
        guard rememberMeFlag else { return }
        let text = telephoneTextField.text
        UserDefaults.standard.set(text, forKey:"USER_TELEPHONE")
    }
}