2016-02-29 9 views
9

Ich migriere eine Webanwendung auf das neue asp.net core Modell und habe einen plötzlichen Haken mit einer der Ansichten gefunden.asp.net mvc core - äquivalent zu User.IsSignedIn()

ich nicht die migrierte entspricht User und User.IsSignedIn() nach dem neuen Modell finden können - wenn sie in Aussicht, so benutzten ...

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

Ich habe versucht, die Microsoft.AspNetCore.Mvc.Razor Bibliothek importieren, wo ich dachte, es wäre gehalten werden, aber es scheint nicht so zu funktionieren.

Antwort

7

Der Ansatz der ASP.NET-Team für RC2 angenommen ist SignInManager.IsSignedIn zu verwenden:

@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

Woher kommt der Wert des Benutzers? – Ciel

+0

Ich versuche dies, und es sagt "Benutzer" existiert nicht im aktuellen Kontext. – Ciel

+0

Das liegt wahrscheinlich an der Tatsache, dass Sie RC2-Pakete verwenden: VS beruht immer noch auf RC1-Tooling und kann nicht auf die Eigenschaften zugreifen, die von der Seitenklasse der Basisansicht verfügbar gemacht werden. Sie können diesen Fehler ignorieren;) – Pinpoint

1

Eigentlich sind die früheren Antworten nicht immer korrekt, weil es darauf ankommt, was "angemeldet" heißt. In Core ist das IPrincipal ein ClaimsPrincipal. Während es eine Identity-Eigenschaft hat, die vom Typ ClaimsIdentity ist, ist es einfach das erste Objekt in der Identity-Eigenschaftensammlung. Dies ist weitgehend für die Abwärtskompatibilität für das alte ASP.NET. In der neuen Welt ist keine Identität notwendigerweise autoritär gegenüber den anderen ... sie sind alle gültig.

Jede dieser Identitäten hat eine IsAuthenticated-Eigenschaft. Sie könnten zum Beispiel eine Identität haben, die einfach einen anonymen Benutzer mit einigen angefügten Ansprüchen verfolgt, so dass die Identität wahrscheinlich IsAuthenticated auf false gesetzt hätte. Auf der anderen Seite, die Installation für die Cookie-Authentifizierung setzt es auf wahr, wenn Sie eine Anmeldemethode aufgerufen haben, aber wieder hängt es davon ab, auf welche Identität ein bestimmter Teil Ihrer App achtet.

In der RTM-Version gibt es auch kein IsSignedIn.

+0

Jeff haben Sie "SignInManager.IsSignedIn (User)" (https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SignInManager.cs#L110) überprüft, das von MVC verwendet wird. Kernvorlagen? Es sieht so aus, als ob irgendein 'ApplicationCookieAuthenticationScheme' als angemeldet betrachtet wird. –

+0

Ja, ich sehe, dass es jetzt existiert. Denken Sie jedoch daran, dass Sie davon ausgehen, dass Sie eine Abhängigkeit vom Identity-Paket erhalten möchten. Identity kann alle Installationen und Persistenzen von Benutzerdaten verarbeiten, aber wenn Sie selbst eine Rolle spielen möchten, benötigen Sie nur Sicherheit. –

Verwandte Themen