在调试器中,如果我深入 User 对象,我可以看到当前成员的 UserData 属性,((System.Web.Security.FormsIdentity)(User.Identity)).Ticket.UserData
其中包含“admin”。
User.Identity.IsAuthenticated
有效,User.IsInRole("admin")
返回 false。
如果“admin”在 UserData 属性中,那么 User.IsInRole("admin") 不应该返回 true 吗?
更新
我像这样设置 FormsAuthenticationTicket:
public static string CreateEncryptedTicket(string username, string roles, DateTime expireAt, bool isPersistent = true) {
var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, expireAt, isPersistent, roles, FormsAuthentication.FormsCookiePath);
return FormsAuthentication.Encrypt(ticket);
}
然后(其中角色是成员所在角色的逗号分隔列表):
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, MemberService.CreateEncryptedTicket(member.Id, roles, expireDate));
HttpContext.Response.Cookies.Add(cookie);