2013-03-16 86 views
0

我遇到了問題:我的websecurity在確認時總是拋出錯誤。我究竟做錯了什麼? 這裏是我的驗證行動(IVE調試它,收到的ID是正確的確認令牌:WebSecurity.ConfirmAccount(Id)始終爲假

public ActionResult Validate(String Id) 
    { 
     if (String.IsNullOrEmpty(Id)) 
     { 
      return View(); 
     } 
     bool b = WebSecurity.ConfirmAccount(Id); 
     if (b) 
     { 
      return View("ConfirmationSuccess"); 
     } 
     return View("ConfirmationFailure"); 
    } 

,這裏是我的註冊行動:

public ActionResult Register(RegisterModel model, string ReturnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      // Попытка зарегистрировать пользователя 
      try 
      { 
       string confirmationToken = WebSecurity.CreateUserAndAccount(model.rEmail.ToLower(), model.rPassword, null, true); 
       dynamic email = new Email("~/Views/Emails/RegisterConfirmation.cshtml"); 
       email.To = model.rEmail; 
       email.ConfirmationToken = confirmationToken; 
       email.Send(); 
       return RedirectToAction("EmailValidation", new { Email = model.rEmail.ToLower() }); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       string field = string.Empty; 
       switch (e.StatusCode) 
       { 
        case MembershipCreateStatus.DuplicateUserName: 
         field = "rEmail"; 
         break; 
        case MembershipCreateStatus.InvalidPassword: 
         field = "rPassword"; 
         break; 
        default: 
         field = "RegisterForm"; 
         break; 
       } 
       ModelState.AddModelError(field, ErrorCodeToString(e.StatusCode)); 
      } 
     } 
     ViewBag.RegisterModel = model; 
     ViewBag.ReturnUrl = ReturnUrl; 
     ViewBag.LoginModel = new LoginModel(); 
     //ModelState.AddModelError("rEmail", "Пользователь с таким e-mail уже зарегистрирован"); 
     // Появление этого сообщения означает наличие ошибки; повторное отображение формы 
     return View("Login"); 
    } 

電子郵件發送註冊後,鏈接是正確的鏈接,但是當它關​​繫到WebSecurity.ConfirmAccount(同上),它總是拋出虛假....

謝謝您的時間和我的英語不好對不起。

UPD: 有一個轉換器可讓所有網址在我的IIS服務器上降低。難道是這種情況嗎,它比較鍵區分大小寫?我該如何解決這個問題?

UPD: 好的,問題確實在小寫的url。 WebSecurity.ConfirmAccount是區分大小寫的......我在我的行動中做了一個小小的解決方法,這樣我就可以得到正確的ConfitmtionToken,但這不是完全正確的方式,而我認爲可能有兩個相同的ConfirmationToken.ToLower()所以,請有人指點我做正確的方法。 這裏是我的解決辦法:

public ActionResult Validate(String Id) 
    { 
     if (String.IsNullOrEmpty(Id)) 
     { 
      return View(); 
     } 
     //bool b = WebSecurity.ConfirmAccount(Id); 
     using (var ctx = new DBContext()) 
     { 
      Id = ctx.wpMembership.Where(s => s.ConfirmationToken.Equals(Id, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault().ConfirmationToken; 
     } 

     if (WebSecurity.ConfirmAccount(Id)) 
     { 
      return View("ConfirmationSuccess"); 
     } 
     return View("ConfirmationFailure"); 
    } 
+0

英語並不壞實際上:) – 2013-03-16 17:04:44

+0

如果你嘗試更換您的創建與該用戶有什麼影響: WebSecurity.CreateUserAndAccount(「用戶名」,「密碼」,requireConfirmationToken:真); – 2013-03-16 17:11:03

+0

謝謝!但同樣的事情......我已經更新了我的帖子,並提供了更多信息 – CodeDemen 2013-03-16 17:24:40

回答

1

這是因爲你逝去的帳戶ID沒有確認標記。您需要傳遞確認標記。

確認令牌由CreateAccount(String,String,Boolean),CreateUserAndAccount(String,String,Object,Boolean)和GeneratePasswordResetToken(String,Int32)方法生成。令牌通常作爲電子郵件消息中的鏈接發送給用戶,並且用戶單擊該鏈接以驗證其身份。