asp.net mvc核心 - 相当于User.IsSignedIn()

时间:2016-02-29 06:30:44

标签: asp.net-core

我正在将一个Web应用程序迁移到新的asp.net core模型,并突然遇到其中一个视图。

我在新模型下找不到迁移的等效UserUser.IsSignedIn() - 在视图中使用时,就像这样......

@using System.Security.Claims
@if (User.IsSignedIn())
{
}

我已经尝试导入Microsoft.AspNetCore.Mvc.Razor库,我认为它会被保留,但它似乎不会那样工作。

3 个答案:

答案 0 :(得分:20)

查看迁移文档我认为这可能会这样做:

@using System.Security.Principal

@if (User.Identity.IsAuthenticated)
{ 
 ...
}

在此处找到:http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingauthmembership.html

答案 1 :(得分:8)

ASP.NET团队为RC2采用的方法是使用SignInManager.IsSignedIn

@using Microsoft.AspNetCore.Identity
@using Mvc.Server.Models

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User)) {
    <form asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
            </li>
        </ul>
    </form>
}
else {
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-controller="Account" asp-action="Register">Register</a></li>
        <li><a asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

答案 2 :(得分:1)

实际上,早期的答案并不总是正确的,因为它取决于“登录”的含义。在Core中,IPrincipal是ClaimsPrincipal。虽然它具有IdentityIdentity类型的Identity属性,但它只是Identities属性集合中的第一个对象。这主要是为了支持旧ASP.NET的向后兼容性。在新的世界里,没有一个人的身份必然具有权威性......他们都是有效的。

每个身份都具有IsAuthenticated属性。例如,您可以拥有一个标识,该标识只是跟踪匿名用户并附加了一些声明,因此无论创建该标识的任何人都可能将IsAuthenticated设置为false。另一方面,当您调用登录方法时,Cookie身份验证的管道将其设置为true,但同样,它取决于您的应用的特定部分正在关注哪个身份。

此外,在RTM版本中,没有IsSignedIn。