使用授权属性验证登录的身份用户

时间:2015-09-04 22:15:35

标签: c# asp.net asp.net-mvc asp.net-identity

我正在创建一个新的ASP.NET Web应用程序,并且我没有计划使用"角色"的概念。但是,我确实希望确保用户在某些页面上登录。是否有任何现有属性只是检查用户是否已登录并重定向或如果他们不是则会引发错误?我所做的每一次搜索都指向使用角色(例如this one)。

2 个答案:

答案 0 :(得分:8)

[Authorize]属性只有在启动请求的用户登录时才会成功返回,并且只能用于控制器和操作方法。

它可以用来装饰特定的动作:

public class FooController : Controller
{
    // only FooAction requires authentication in FooController
    [Authorize]
    public async Task<ActionResult> FooAction()
    {        

    }

    public async Task<ActionResult> BarAction()
    {

    }
}

......或整个控制器:

// all actions in FooController require authentication
[Authorize]
public class FooController : Controller
{
    public async Task<ActionResult> FooAction()
    {        

    }

    public async Task<ActionResult> BarAction()
    {

    }
}

您还有Request.IsAuthenticated可用于操作和非操作方法:

if (Request.IsAuthenticated) //or @if in Razor
{
    //request is authenticated 
}

......甚至User.Identity.IsAuthenticated正如@Darko在答案中正确指出的那样。就个人而言,我更喜欢Request.IsAuthenticated而不是User.Identity.IsAuthenticated,因为它还为UserUser.Identity提供了一些有用的空值检查。以下是Request.IsAuthenticated的内幕:

public bool IsAuthenticated
{
    get
    {
        return(_context.User != null 
               && _context.User.Identity != null 
               && _context.User.Identity.IsAuthenticated);
    }
}

答案 1 :(得分:-2)

您可以使用User属性,只需将if()放在可以控制访问权限的位置即可。 protected void Page_Load(object sender,EventArgs e)

{
    if (User.Identity.IsAuthenticated)
    {
        Page.Title = "Home page for " + User.Identity.Name;
    }
    else
    {
        Page.Title = "Home page for guest user.";
    }
}

设置web.config后,这应该可以正常工作。这是文档https://msdn.microsoft.com/en-us/library/9wff0kyh(v=vs.85).aspx