我正在使用mvc5开发erp系统。我建立了自己的会员系统,用户和用户权限一旦用户登录就保存在会话变量中。我认为授权部分几乎完成了。但是对于身份验证,我现在试图限制未经身份验证的用户的访问。我试过这样的
在我的web.config
中<authentication mode="Forms">
<forms loginUrl="~/Login/Login" timeout="2880" />
</authentication>
并且在控制器上我放了[授权]属性。
这适用于未经身份验证的用户。它们被重定向到登录页面。但这也限制了经过身份验证的用户的访问权限。(这意味着未经身份验证的用户和经过身份验证的用户都无法访问具有授权属性的控制器)。
如果我删除authorize属性,它会给我一个错误,因为没有用户被分配给会话变量。这意味着没有授权属性 即使web.config已被修改,未经身份验证的用户也可以访问控制器。
我认为这涉及创建自定义属性。但我不知道如何处理这个问题。所有帮助赞赏。提前致谢!
答案 0 :(得分:0)
经过研究,我想出了解决方案。 我创建了一个自定义授权属性。
public class CustomAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authroized = base.AuthorizeCore(httpContext);
// Now check the session:
var myvar = httpContext.Session["User"];
if (myvar == null)
{
// the session has expired
return false;
}
return true;
}
}
在我的控制器而不是[authorize]上我放了[CustomAuthorize]。
在web.config中
<authentication mode="Forms">
<forms loginUrl="~/Login/Login" timeout="2880" />
</authentication>