從jQuery發送ajax請求時,我知道用戶是否已通過身份驗證。FormsAuthentication和Ajax請求
HttpContext.User.Identity
當用戶從其瀏覽器發出常規請求並設置了aspxauth
cookie時,它不爲空。當用戶嘗試從jQuery執行ajax請求時,根本沒有設置aspxauth
。
我的web.config
<authentication mode="Forms">
<forms loginUrl="~/" />
</authentication>
設置FormsAuthentication餅乾
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);
當我通過我的broser提出請求時,會出現身份驗證的cookie:
每當我提出一個要求通過JavaScript使用$ .get()或加載JavaScript腳本/任何其他請求通過JavaScript,我得到:
奇怪的是,在另一個ASP應用程序中,我使用的是WebSecurity
,而且完美地工作。身份驗證Cookie始終從客戶端發送回服務器。對於這個ASP MVC 5
應用程序,當我嘗試使用FormAuthentication時,我無法讓AuthCookie繼續處理所有請求。
當對象來自ajax請求時未設置用戶 – 2015-02-23 20:31:50
此User對象不是來自HttpContext,而是直接來自控制器。當調用任何控制器方法時,無論請求是什麼「類型」,它都會被解析。我假設你的ajax請求正在調用控制器方法正確? – pnm 2015-02-23 21:10:20
目前,我正在使用名爲'CustomAuth'的Action的授權屬性ontop來檢查用戶是否爲null,然而,當我正在執行ajax請求時,它始終爲空。不要將HttpContext傳遞給我的屬性? – 2015-02-23 21:29:54