asp.net mvc核心 - 相当于User.IsSignedIn()
我正在将Web应用程序迁移到新的asp.net core
模型,并且突然遇到了其中一个视图。asp.net mvc核心 - 相当于User.IsSignedIn()
我找不到迁移相当于User
和User.IsSignedIn()
新模式下 - 在视图中使用时,是这样的...
@using System.Security.Claims
@if (User.IsSignedIn())
{
}
我试图导入Microsoft.AspNetCore.Mvc.Razor
图书馆,我认为它会举行,但似乎并没有这样工作。
由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>
}
望着迁移文档我认为这可能做到这一点:
@using System.Security.Principal
@if (User.Identity.IsAuthenticated)
{
...
}
这里找到:http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingauthmembership.html
其实,以前的答案并不总是正确的,因为它取决于“登录”的含义。在Core中,IPrincipal是ClaimsPrincipal。虽然它具有Identity属性,该属性是ClaimsIdentity类型,但它只是Identities属性集合中的第一个对象。这主要是为了旧的ASP.NET的向后兼容性。在新的世界里,没有一个人的身份必然是对其他人的权威......他们都是有效的。
每个身份都有一个IsAuthenticated属性。例如,您可以拥有一个身份,该身份只是跟踪附加了一些声明的匿名用户,因此无论创建身份如何,都可能将IsAuthenticated设置为false。另一方面,当您调用登录方法时,Cookie auth的管道设置为true,但同样取决于您的应用的特定部分注意哪个身份。
另外,在RTM版本中,没有IsSignedIn。
Jeff您是否检查过MVC使用的'SignInManager.IsSignedIn(User)'(https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SignInManager.cs#L110)核心模板?它看起来像任何'ApplicationCookieAuthenticationScheme'被视为登录。 –
是的,我确实看到现在存在。但请记住,这是假定您想要对Identity包进行依赖。身份可以处理用户数据的所有管道和持久性,但是如果您想要自己扮演角色,则只需要安全性。 –
User的值来自哪里? – Ciel
我尝试了这一点,它说在当前上下文中不存在“用户”。 – Ciel
这可能是由于您使用RC2包的原因:VS仍然依赖于RC1工具,并且无法访问基本视图页面类公开的属性。你可以放心地忽略这个错误;) – Pinpoint