Не удается получить текущего.User.Идентификация с использованием formsauthentication

#c# #asp.net #asp.net-mvc

#c# #asp.net #asp.net-mvc

Вопрос:

Я новичок в asp.net mvc 2. Я изучаю mvc, выполняя тестовый проект. Я использую formsauthentication для входа на мой веб-сайт. Во время входа в систему я могу войти на веб-сайт, но я не получаю идентификатор пользователя.

я принял http://www.dotnetfunda.com/articles/article141.aspx в качестве моего справочного веб-сайта

в моем файле webconfig.

 <authentication mode="Forms">
      <forms loginUrl="~/Home/login" defaultUrl="~/Home/login" cookieless="UseCookies" slidingExpiration="true" timeout="20" />
</authentication>
  

в контроллере входа

 public ActionResult Login(LogOnModel logon)
{
    if (ModelState.IsValid)
    {
        if (FormsService.SignIn(logon.UserName, logon.Password) == true)
        {
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, // version 
                                                    FormsService.Username, // user name
                                                    DateTime.Now, // create time
                                                    DateTime.Now.AddSeconds(30), // expire time
                                                    false, // persistent
                                                    FormsService.Role,
                                                    FormsAuthentication.FormsCookiePath); // user data, such as roles

            string hashCookies =   FormsAuthentication.Encrypt(ticket);
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
            Response.Cookies.Add(cookie);
            if (FormsService.Role == "Brand")
            {
                return RedirectToAction("Index", "Creative");
            }
            else if (FormsService.Role == "Creative")
            {
                return RedirectToAction("Index", "Creative");
            }
        }
    }

    return View();
}
  

в userlogoncontrol я внес изменения, подобные этим.
но он не отображает имя пользователя и мою ячейку.

 <%
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
%>
        Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
        [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ] |

<%
        if(HttpContext.Current.User.IsInRole("Brand"))
        {
%>
        [ <%= Html.ActionLink("my bin", "Bin", "Brand") %> ] |
<%
        }
        else if (HttpContext.Current.User.IsInRole("Creative"))
        {
%>
         [ <%= Html.ActionLink("my bin", "Bin", "Creative") %> ] |
<%
        }
    }
    else 
    {
%> 
        [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
<%
    }
%>
  

Я что-нибудь пропустил?Как я могу сохранить свои данные пользователя, такие как userid и роль, в cookie.

Ответ №1:

Статья, на которую вы ссылаетесь, посвящена WebForms. В ASP.NET MVC Я бы рекомендовал вам использовать пользовательский [Authorize] фильтр. Ваш Login выглядит нормально. Вы можете оставить это так. Затем напишите пользовательский атрибут авторизации:

 public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (isAuthorized)
        {
            var cookie = httpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (cookie != null)
            {
                var ticket = FormsAuthentication.Decrypt(cookie.Value);
                var roles = ticket.UserData.Split(',');
                var identity = new GenericIdentity(ticket.Name);
                httpContext.User = new GenericPrincipal(identity, roles);
            }
        }
        return isAuthorized;
    }
}
  

Теперь украсьте контроллер / действие этим пользовательским атрибутом:

 [MyAuthorize]
public ActionResult Foo()
{
    // here the this.User property will represent the custom principal
    ...
}
  

Теперь нужно коснуться Global.asax .

Ответ №2:

_identity = поток.CurrentPrincipal.Идентификатор;