
setting HttpContext.Current.User
这似乎有效,直到我尝试使用自定义AuthorizeAttribute查看任何其他控制器方法.
控制器方式:
[httpPost][AllowAnonymous]public ActionResult Login(string username){ string password = ConfigurationManager.AppSettings["Pass"]; User user = service.Login(username,password); var name = FormsAuthentication.Formscookiename; var cookie = Response.cookies[name]; if (cookie != null) { var ticket = FormsAuthentication.Decrypt(cookie.Value); if (ticket != null && !ticket.Expired) { string[] roles = (ticket.UserData as string ?? "").Split(','); System.Web.httpContext.Current.User = new GenericPrincipal(new FormsIDentity(ticket),roles); } } //...processing result return Json(result);} 上面的service.Login方法创建了cookie:
FormsAuthentication.SetAuthcookie(cookieValue,false);
虽然我设置了具有IDentity和IsAuthenticated的用户,但下面的filterContext.httpContext.User不是同一个用户.它基本上是空的,好像它从未被分配,并且没有被认证.
public overrIDe voID OnAuthorization(AuthorizationContext filterContext) { string[] userDetails = filterContext.httpContext.User.IDentity.name.Split(char.Parse("|"));} 我找到的最近的帖子是:IsAuthenticated works on browser – but not with Air client!
但是,针对我的修复已经到位了:
<authentication mode="Forms"> <forms cookieless="Usecookies" timeout="60" loginUrl="~/Account/Login" /></authentication>
我使我的AuthorizationContext.User与我在控制器中验证的httpContext.Current.User相匹配?
更新:
我意识到我需要一个重定向来正确设置cookie,我只是不能通过AJAX调用远程完成该工作.在站点B上执行控制器方法时,站点A中的脚本是什么样的.此重定向不会设置会话.在下一个控制器方法上验证用户时仍然不存在.它只是将我重定向到登录视图.
function remoteLogin(ID) { $.AJAX({ url: "/MyController/RemoteLogin",type: "POST",dataType: "Json",data: { "ID": ID } }).done(function (data) { if (data) { if (data.user) { var user = data.user; $.AJAX({ url: "http://siteB.xyz/Account/Login",data: { "username": user.username,"password": user.password } }).done(function (data) { if (data) { window.location.href = "http://siteB.xyz/Next" } else { alert("Fail."); } }).fail(function (data) { alert("Fail."); }); } else { alert("Fail."); } } }).fail(function (data) { alert("Fail."); });}解决方法 您所遇到的问题是,您只需设置身份验证cookie,在发出新请求之前,不会发生在表单身份验证模块中创建的IPrincipal,因此httpContext.User处于异常状态.一旦重定向发生,那么因为它是一个来自浏览器的新请求,所以在您的页面到达之前,cookie将被读取,并创建正确的用户对象. cookie只有在请求完成后才能在浏览器中设置.
总结以上是内存溢出为你收集整理的.net表单验证 – 手动设置HttpContext.Current.User在自定义AuthorizeAttribute中不起作用全部内容,希望文章能够帮你解决.net表单验证 – 手动设置HttpContext.Current.User在自定义AuthorizeAttribute中不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)