2016-02-29 147 views
9

我正在將Web應用程序遷移到新的asp.net core模型,並且突然遇到了其中一個視圖。asp.net mvc核心 - 相當於User.IsSignedIn()

我找不到遷移相當於UserUser.IsSignedIn()新模式下 - 在視圖中使用時,是這樣的...

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

我試圖導入Microsoft.AspNetCore.Mvc.Razor圖書館,我認爲它會舉行,但似乎並沒有這樣工作。

回答

7

由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

1

其實,以前的答案並不總是正確的,因爲它取決於「登錄」的含義。在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包進行依賴。身份可以處理用戶數據的所有管道和持久性,但是如果您想要自己扮演角色,則只需要安全性。 –