【发布时间】:2015-02-25 04:38:51
【问题描述】:
当从 jQuery 发送 ajax 请求时,我无法知道用户是否经过身份验证。
HttpContext.User.Identity 不为空,当用户从浏览器发出常规请求并且设置了aspxauth cookie 时。当用户尝试从 jQuery 发出 ajax 请求时,aspxauth 根本没有设置。
我的网络配置
<authentication mode="Forms">
<forms loginUrl="~/" />
</authentication>
设置 FormsAuthentication Cookie
var cookie = new AuthCookie
{
UserId = user.UserId,
Email = user.Email,
Name = user.Name,
RememberMe = createPersistentCookie,
TimeZone = user.TimeZone,
CompanyId = user.CompanyId,
Roles = new List<string> { user.Role ?? "user" }
};
string userData = JsonConvert.SerializeObject(cookie);
var ticket = new FormsAuthenticationTicket(1, cookie.Email, DateTime.Now,
DateTime.Now.Add(FormsAuthentication.Timeout),
createPersistentCookie, userData);
string encTicket = FormsAuthentication.Encrypt(ticket);
var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = DateTime.Now.Add(FormsAuthentication.Timeout) };
_httpContext.Response.Cookies.Add(httpCookie);
当我通过我的兄弟发出请求时,身份验证 cookie 出现:
每当我使用 $.get() 通过 javascript 发出请求或通过 javascript 加载 javascript 脚本/任何其他请求时,我都会得到:
奇怪的是,我在另一个 ASP 应用程序上使用了WebSecurity,而且效果很好。 auth cookie 总是从客户端发送回服务器。对于这个 ASP MVC 5 应用程序,当我尝试使用 FormAuthentication 时,我无法让 AuthCookie 继续处理所有请求。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 forms-authentication