2010-01-07 28 views
1

我一直在这里挠我的头一阵子,但仍然无法得到它。 我试图简单地在MVC2应用程序中登录用户。无法在MVC中登录用户!

我已经试过,我知道去尝试,但仍无法弄清我做错了一切。 以下是我已经尝试了几件事情:

FormsAuthentication.SetAuthCookie(emailAddress, rememberMe); 
var cookie = FormsAuthentication.GetAuthCookie(emailAddress, rememberMe); 
HttpContext.Response.Cookies.Add(cookie); 
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(emailAddress, rememberMe, 15); 
FormsIdentity identity = new FormsIdentity(ticket); 
GenericPrincipal principal = new GenericPrincipal(identity, new string[0]); 
HttpContext.User = principal; 

我不知道是否有任何这是做(因为它不工作)了正确的事情。 经过设定HttpContext.User = principal然后Request.IsAuthenticated == true。 然而,在Global.asax中我有这样的:

HttpCookie authenCookie = Context.Request.Cookies.Get( 
    FormsAuthentication.FormsCookieName); 

有史以来唯一可用的饼干是ASPNET会话cookie。

任何想法都将非常感激!

+0

你是说新的默认ASP.NET MVC 2项目不起作用?如果没有,您是否尝试过使用默认项目来查看是否有效? – Eilon 2010-01-07 04:42:47

+0

默认的mvc2项目确实有效。我不知道我是如何搞砸的! – devlife 2010-01-07 05:12:01

回答

1

你在做太多的工作。它需要一个函数调用登录有人在这里有一个从一个新的MVC 2应用程序中的样板代码:

private bool ValidateLogOn(string userName, string password) 
    { 
     if (String.IsNullOrEmpty(userName)) 
     { 
      ModelState.AddModelError("username", "You must specify a username."); 
     } 
     if (String.IsNullOrEmpty(password)) 
     { 
      ModelState.AddModelError("password", "You must specify a password."); 
     } 
     if (!MembershipService.ValidateUser(userName, password)) // this is the login 
     { 
      ModelState.AddModelError("_FORM", "The username or password provided is incorrect."); 
     } 

     return ModelState.IsValid; 
    } 

注意注释行。这就是你需要做登录的全部内容。我注意到你在代码中没有调用ValidateUser。你需要这个。

+0

ValidateLogOn不是我的问题。 我拥有所有这些东西的唯一原因是因为它不工作。 – devlife 2010-01-07 19:36:27

+0

确定,所以我已删除比 FormsAuthentication.SetAuthCookie(EMAILADDRESS,与rememberMe)其它一切; 它仍然不起作用。 ValidateLogOn不执行实际的登录。它只验证数据存储中存在的凭证。 还有其他想法吗? – devlife 2010-01-08 06:41:03

+0

在默认的MVC项目中阅读'AccountController.cs'的其余部分。 LogOn操作首先调用ValidateLogOn,然后调用FormsAuth.SignIn。 – 2010-01-08 12:53:09