2009-08-21 15 views
1

我正在與asp.net MVC示例應用程序附帶的默認帳戶控制器一起使用自定義asp.net成員資格提供程序。一切都很順利,除了一件小事情:用戶創建一個帳戶並自動登錄並重定向後,其用戶名不會顯示出正常的歡迎信息。MVC中的登錄控制在帳戶創建重定向後不顯示用戶名

我想也許這是因爲他們在提出請求時沒有登錄。一旦他們再次登錄他們的名字出現在頂部,所以我不認爲這是會員供應商的錯誤,但我可能是錯的。

寄存器和重定向器方法附帶asp.net MVC是這樣的:

public ActionResult Register(string userName, string email, string password, string confirmPassword) 
{ 

    ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 

    if (ValidateRegistration(userName, email, password, confirmPassword)) 
    { 
     // Attempt to register the user 
     MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email); 

     if (createStatus == MembershipCreateStatus.Success) 
     { 
      FormsAuth.SignIn(userName, false /* createPersistentCookie */); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus)); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(); 
} 

這是通過使用方式窗體身份驗證。

編輯:這是索引頁面使用的主頁面。這是的Site.Master附帶的默認asp.net MVC應用程序:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<div id="header"> 
     <div id="title"> 
      <h1>Internship Site</h1> 
     </div> 

     <div id="logindisplay"> 
      <% Html.RenderPartial("LogOnUserControl"); %> 
     </div> 

     <div id="menucontainer"> 

      <ul id="menu">    
       <li><%= Html.ActionLink("Home", "Index", "Home")%></li> 
       <li><%= Html.ActionLink("About", "About", "Home")%></li> 
      </ul> 

     </div> 
    </div> 

    <div id="main"> 
     <noscript>Your browser does not support JavaScript!</noscript> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 

     <div id="footer"> 
     </div> 
    </div> 
</div> 

非常感謝任何幫助和見解。

+0

是你的登錄控件顯示使用AJAX,如果是這樣,你看到的主要是在IE中這個問題呢?有一些技巧讓IE能夠正確刷新ajax面板。 – 2009-08-24 17:13:44

+0

我目前沒有使用AJAX。我一直在做Firefox的大部分測試。不過好想,我也遇到過。 – 2009-08-24 17:20:17

回答

3

你是對的。它沒有顯示用戶名的原因是因爲在帳戶創建後重定向到主頁時他們沒有登錄。更改以下行:

FormsAuth.SignIn(userName, false /* createPersistentCookie */); 

到:

FormsAuth.SignIn(userName, true /* createPersistentCookie */); 
+0

即使當我創建cookie時,我也會得到相同的結果。 – 2009-08-21 19:25:00

+0

然後檢查您的cookies。您是否嘗試過使用清理掉的Cookie來執行此工作流程? – MunkiPhD 2009-08-22 01:44:52

+0

是的,我在每次測試前清除它們。 – 2009-08-24 15:36:15

0

做我(而不是FormsAuth.SignIn())

if (Provider.ValidateUser(username, password) 
{ 
    FormsAuth.SetAuthCookie(username, rememberMe); 
} 

哪裏還記得我是表示的值的變量記得我複選框(真,假)

編輯:我剛纔看到這是註冊。我仍然使用.SetAuthCookie,但顯然我不會執行.ValidateUser(在我的註冊碼中)。

+0

不幸的是,這產生了相同的結果。 – 2009-08-24 15:35:38

+0

您可以顯示您重定向到的家庭索引代碼嗎? – 2009-08-24 17:12:24

+0

我已將索引視圖所使用的母版頁添加到了我原來的帖子中。視圖本身只是佔位符的東西。 – 2009-08-24 17:18:44

0

用戶驗證和自動登錄的正常過程進行如下:

 public ActionResult Login(string userName, string password, bool persistent, string returnUrl) 
    { 

     if (returnUrl != null && returnUrl.IndexOf("/user/login", StringComparison.OrdinalIgnoreCase) >= 0) 
      returnUrl = null; 

     if (Membership.ValidateUser(userName, password)) 
     { 
      FormsAuthentication.SetAuthCookie(userName, persistent); 

      if (!String.IsNullOrEmpty(returnUrl)) 
       return this.Redirect(303, returnUrl); 
      else 
       return this.Redirect(303, FormsAuthentication.DefaultUrl); 
     } 
     else 
      TempData["ErrorMessage"] = "Login failed! Please make sure you are using the correct user name and password."; 
     return View(); 
    }