2016-07-29 75 views
1

我想拒绝访问不正确的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; 

     } 
    } 
+0

在此代码中,您没有任何登录方式,代码中告诉您某人已登录? –

+0

它是一个登录按钮,这些字段是故事板上的用户文本字段。在另一页上是注册表格,其中存储了用户名和用户密码。因此,该页面在登录按钮的按下时检查他们的访问是被批准还是被拒绝。 –

+0

登录线,其工作是:如果(userEmailStored == USEREMAIL) { 如果(userPasswordStored ==的userPassword) { //登录是全成 NSUserDefaults.standardUserDefaults()setBool(真,forKey:“isUserLoggedIn “); NSUserDefaults.standardUserDefaults()。synchronize(); 自我。dismissViewControllerAnimated(true,completion:nil); –

回答

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和支架之间整整两个系列,并在你的代码的其余部分其他一些乱七八糟的东西。你可能会让更多的人回答你的问题,并且让你和其他人更容易理解你的代码,如果你努力使它更易读。在左括号之前的两行空格是一个眼睛,而且很多可能使代码真的很难理解。

+0

非常有帮助!谢谢你,索伦,现在就来试试吧。并感谢您提供有关代码的提示和非常有用的解释,以及使代码更具可读性。我是一名初学者学习者(所以有更多的空白让我更容易阅读,而且我计划在那里添加笔记) - 现在我将编辑它以使其更具可读性。谢谢。 –

+0

非常欢迎!我希望你能解决这个问题。空白是有帮助的,但试图把它放在符合逻辑的地方。你总是可以看一下风格指南,比如[Github Swift Style Guide](https://github.com/github/swift-style-guide),尽管其中的一些内容对于初学者。你也可以看看一些代码,试图了解人们布置代码的方式((无耻自我插件)(https://github.com/sorenmortensen/Symonds-API))。祝你好运,我肯定有经验你的代码会变得很美:) –

+0

@DimitriT顺便说一句,如果我的答案帮助你,你会介意将它标记为已接受? –