通常我会使用[Authorize]
保护我的操作,但这次我需要检查用户是否在操作中获得授权。
例如
if(userIsAuthorized) {
//do stuff
}
else {
//return to login page
}
我相信我正在使用'表单身份验证'
这个问题与this类似,但没有给出任何答案。
编辑:我已经做了一些挖掘 - 似乎我在具有[Authorize]
的Action上断点,设置了User.Identity,但是在没有它的Actions上,User.Identity为空,即使我已登录
答案 0 :(得分:44)
如果您只是想知道用户是否已登录:
if (User.Identity.IsAuthenticated) { ... }
如果您尝试执行任何特定于角色的操作:
if (User.IsInRole("Administrators")) { ... }
User
实例是Controller
类的公共属性,因此您始终可以从您编写的Controller访问它。如果没有用户登录,则GenericPrincipal
应为User
,GenericIdentity
应为User.Identity
,因此请不要担心检查空值。
答案 1 :(得分:5)
Request.IsAuthenticated
应该适用于你想要做的事情。
答案 2 :(得分:1)
我建议先找出您使用的授权类型。 ;)
您发布的答案是正确的。根据我的记忆,在[Authorize]属性和相关的ActionFilter代码中,MVC在内部调用Page.User.Identity.IsAuthenticated就像那些代码示例一样。
答案 3 :(得分:1)
创建一个这样的属性:OnActionExecuting将先于动作中的其他代码
执行 public class IsAuthenticatedAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//do your validations here. and redirect to somewhere if needed.
filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
}
}
在您需要检查的每个操作上,添加如下属性:
[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
// no need to worry about checking here.
//do you action things
}
修改强> 这个仍然完成操作,然后只重定向它。没那么有用。
答案 4 :(得分:0)
在您的每个操作中添加注解[Authorize]。 Microsoft link. 示例:
public class AdministrationController : Controller
{
// GET: User/Create
[Authorize]
public ActionResult Create()
{
}
}