2016-07-29 70 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順便說一句,如果我的答案幫助你,你會介意將它標記爲已接受? –