我想拒绝访问不正确的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;
}
}
答案 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
,因为它实际上并不是必需的。
但是,您可能会注意到,当您登录大多数网站时,如果您的详细信息有误,他们就不会指定您的用户名或电子邮件是否不正确。
例如:
他们这样做是因为它更安全。所以你可能想要考虑这样做:
if userEmailStored == userEmail && userPasswordStored == userPassword {
// Login successful
} else {
// Login unsuccessful
}
重要提示:
请记住,NSUserDefaults不以任何方式加密,因此如果您计划在那里存储用户名和密码,请不要这样做。它以XML格式存储(我相信),所以任何人都可以轻松地去查看它。请改用钥匙串!
一个不那么重要的注意事项:在else if
和它的括号之间有两行整行的空格,以及其余代码中的其他一些杂乱的东西。如果您付出一些努力使其更具可读性,您可能会让更多人回答您的问题,并使您和其他人更容易理解您的代码。在开括号之前的两行空格是一个眼睛,很多可能使代码真的难以理解。