#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.Идентификатор;