如何在iOS swift中拒绝登录访问错误登录

时间:2016-07-29 09:03:52

标签: swift login

我想拒绝访问不正确的userEmail或userPassword,但我不确定如何添加两个细节。我的代码拒绝登录错误的电子邮件没有任何影响,或返回任何错误。它只是让每个人都登录。如何更正此代码?

func displayMyAlertMessage(userMessage:String)
{

    var myAlert = UIAlertController(title:"Alert", message:userMessage, preferredStyle: UIAlertControllerStyle.Alert);

  let okAction = UIAlertAction(title:"Ok", style:UIAlertActionStyle.Default, handler:nil);
    myAlert.addAction(okAction);

  self.presentViewController(myAlert, animated:true, completion:nil);

}


@IBAction func loginButtonTapped(sender: AnyObject) {

    let userEmail = userEmailTextField.text;
    let userPassword = userPasswordTextField.text;

    let userEmailStored = NSUserDefaults.standardUserDefaults().stringForKey("userEmail");

    let userPasswordStored = NSUserDefaults.standardUserDefaults().stringForKey("userPassword");

    if(userEmailStored == userEmail)
    {
        if(userPasswordStored == userPassword)
        {
            // Login is successfull
            NSUserDefaults.standardUserDefaults().setBool(true,forKey:"isUserLoggedIn");
            NSUserDefaults.standardUserDefaults().synchronize();
            self.dismissViewControllerAnimated(true, completion:nil);
        }
        //Check if passwords match
        else if(userPasswordStored != userPassword)

        {
        //    Display an alert message
            NSUserDefaults.standardUserDefaults().setBool(false,forKey:"isUserLoggedIn");

            displayMyAlertMessage("Passwords do not match");
            return;

        }
    }

1 个答案:

答案 0 :(得分:1)

问题是您首先要检查电子邮件是否正确,然后是否正在检查该块内的密码。如果电子邮件不正确,您还没有提供任何代码。

而不是像这样构造它:

if userEmailStored == userEmail {
    if userPasswordStored == userPassword {
        // Login successful
    } else {
        // Login unsuccessful
    }
}

尝试像这样构建它:

if userEmailStored == userEmail && userPasswordStored == userPassword {
    // Login successful
} else if userEmailStored != userEmail {
    // Login unsuccessful (email incorrect)
} else /* if userPasswordStored != userPassword */ {
    // Login unsuccessful (password incorrect)
}

注意:在第5行,我已经注明了条件if userPasswordStored != userPassword,因为它实际上并不是必需的。

但是,您可能会注意到,当您登录大多数网站时,如果您的详细信息有误,他们就不会指定您的用户名或电子邮件是否不正确。

例如:

Stackoverflow incorrect credentials message

他们这样做是因为它更安全。所以你可能想要考虑这样做:

if userEmailStored == userEmail && userPasswordStored == userPassword {
    // Login successful
} else {
    // Login unsuccessful
}

重要提示:

请记住,NSUserDefaults不以任何方式加密,因此如果您计划在那里存储用户名和密码,请不要这样做。它以XML格式存储(我相信),所以任何人都可以轻松地去查看它。请改用钥匙串!

一个不那么重要的注意事项:在else if和它的括号之间有两行整行的空格,以及其余代码中的其他一些杂乱的东西。如果您付出一些努力使其更具可读性,您可能会让更多人回答您的问题,并使您和其他人更容易理解您的代码。在开括号之前的两行空格是一个眼睛,很多可能使代码真的难以理解。