我正在将一个Web应用程序迁移到新的asp.net core
模型,并突然遇到其中一个视图。
我在新模型下找不到迁移的等效User
和User.IsSignedIn()
- 在视图中使用时,就像这样......
@using System.Security.Claims
@if (User.IsSignedIn())
{
}
我已经尝试导入Microsoft.AspNetCore.Mvc.Razor
库,我认为它会被保留,但它似乎不会那样工作。
答案 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。