我的MVC 4.0 / Razor网站存在问题。
这是我最近继承的(尚未推出)公共网站。 所有页面的90%应该可供所有人使用,其余页面适用于超级用户并需要身份验证。
这是通过面向公众的页面上的AllowAnonymous属性来处理的,就像这样实现;
public class RequireAuthenticationAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) ||
filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(
typeof(AllowAnonymousAttribute), true);
if (!skipAuthorization)
base.OnAuthorization(filterContext);
}
}
现在,问题在于我想对面向公众的网站进行一些自定义(为了争论,让我们假设“当前登录:XYZ” - 某处的标签)。我尝试过的是使用User.Identity,但在所有包含AllowAnonymous,User.Identity.Name ==“”的页面上,即使超级用户登录了。(如果他将网址更改为网页使用身份验证,他再次登录,并且User.Identity.Name是正确的。)
有没有办法同时使用“允许匿名”并跟踪谁登录?
答案 0 :(得分:0)
我想我已经解决了这个问题。
问题是我们的自定义子域路由。我必须覆盖“域”设置,因此它指向.example.com
而不是example.com
的Cookie(主要是aspxauth)。
这需要一段时间才能实现的原因是许多其他定制部件,可能会干扰应用程序,尤其是:
要点: 如果实施子域路由规则并且需要在子域之后进行身份验证,则必须更改cookie的基本域。