User.Identity.IsAuthenticated vs WebSecurity.IsAuthenticated

时间:2013-04-06 16:27:44

标签: c# authentication asp.net-mvc-4 forms-authentication

在MVC4应用程序中,在控制器逻辑中,我想检查用户是否已登录 我应该使用:

User.Identity.IsAuthenticated

或者:

WebSecurity.IsAuthenticated

据我所知WebSecurity只是一个包装器。我应该使用它还是User.Identity具有不同的功能?

1 个答案:

答案 0 :(得分:7)

  

据我所知,WebSecurity只是一个包装器。

这是正确的,两者都是一样的。我们来看看如何实现WebSecurity.IsAuthenticated属性:

public static bool IsAuthenticated
{
    get
    {
        return Request.IsAuthenticated;
    }
}

现在让我们看看如何实现WebSecurity.Request静态属性:

internal static HttpRequestBase Request
{
    get
    {
        return Context.Request;
    }
}

最后让我们看看如何实现WebSecurity.Context静态属性:

internal static HttpContextBase Context
{
    get
    {
        return new HttpContextWrapper(HttpContext.Current);
    }
}

所以你可以看到:

WebSecurity.IsAuthenticated

与:

相同
new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated

反过来与Context.User.Identity.IsAuthenticated相同,只是存在空检查,如果Identity属性为null,则属性将返回false。

  

我应该使用它还是User.Identity具有不同的功能?

即使两者严格等同,我也会使用User.Identity这是官方的ASP.NET实现,因为如果明天你决定用其他东西替换简单的成员资格提供者,你将会有更少的东西需要替换。你的代码。