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

问题描述:

我正在将Web应用程序迁移到新的asp.net core模型,并且突然遇到了其中一个视图。asp.net mvc核心 - 相当于User.IsSignedIn()

我找不到迁移相当于UserUser.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> 
} 
+0

User的值来自哪里? – Ciel

+0

我尝试了这一点,它说在当前上下文中不存在“用户”。 – Ciel

+0

这可能是由于您使用RC2包的原因:VS仍然依赖于RC1工具,并且无法访问基本视图页面类公开的属性。你可以放心地忽略这个错误;) – Pinpoint

望着迁移文档我认为这可能做到这一点:

@using System.Security.Principal 

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

这里找到:http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingauthmembership.html

+0

这就是它的确的!谢谢! – Ciel

+1

这是正确的答案 – hidden

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

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

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

+0

Jeff您是否检查过MVC使用的'SignInManager.IsSignedIn(User)'(https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SignInManager.cs#L110)核心模板?它看起来像任何'ApplicationCookieAuthenticationScheme'被视为登录。 –

+0

是的,我确实看到现在存在。但请记住,这是假定您想要对Identity包进行依赖。身份可以处理用户数据的所有管道和持久性,但是如果您想要自己扮演角色,则只需要安全性。 –