如何拒绝iOS中不正确登录的登录访问swift
我想拒绝访问不正确的userEmail或userPassword,但不知道如何添加这两个细节。我的代码拒绝登录不正确的电子邮件没有任何影响,或返回任何错误。它只是让每个人都登录。我怎样才能纠正这个代码?如何拒绝iOS中不正确登录的登录访问swift
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;
}
}
问题是,你是第一次检查电子邮件是否正确,然后如果是你检查该块内的密码。如果电子邮件不正确,您还没有提供任何代码。
而是将其结构是这样的:
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
和支架之间整整两个系列,并在你的代码的其余部分其他一些乱七八糟的东西。你可能会让更多的人回答你的问题,并且让你和其他人更容易理解你的代码,如果你努力使它更易读。在左括号之前的两行空格是一个眼睛,而且很多可能使代码真的很难理解。
非常有帮助!谢谢你,索伦,现在就来试试吧。并感谢您提供有关代码的提示和非常有用的解释,以及使代码更具可读性。我是一名初学者学习者(所以有更多的空白让我更容易阅读,而且我计划在那里添加笔记) - 现在我将编辑它以使其更具可读性。谢谢。 –
非常欢迎!我希望你能解决这个问题。空白是有帮助的,但试图把它放在符合逻辑的地方。你总是可以看一下风格指南,比如[Github Swift Style Guide](https://github.com/github/swift-style-guide),尽管其中的一些内容对于初学者。你也可以看看一些代码,试图了解人们布置代码的方式((无耻自我插件)(https://github.com/sorenmortensen/Symonds-API))。祝你好运,我肯定有经验你的代码会变得很美:) –
@DimitriT顺便说一句,如果我的答案帮助你,你会介意将它标记为已接受? –
在此代码中,您没有任何登录方式,代码中告诉您某人已登录? –
它是一个登录按钮,这些字段是故事板上的用户文本字段。在另一页上是注册表格,其中存储了用户名和用户密码。因此,该页面在登录按钮的按下时检查他们的访问是被批准还是被拒绝。 –
登录线,其工作是:如果(userEmailStored == USEREMAIL) { 如果(userPasswordStored ==的userPassword) { //登录是全成 NSUserDefaults.standardUserDefaults()setBool(真,forKey:“isUserLoggedIn “); NSUserDefaults.standardUserDefaults()。synchronize(); 自我。dismissViewControllerAnimated(true,completion:nil); –