2016-02-29 42 views
9

Webアプリケーションを新しいasp.net coreモデルに移行していて、ビューの1つに突然突入しました。asp.net mvc core - User.IsSignedIn()と同等です。

私は新しいモデルの下で UserUser.IsSignedIn()への移行相当するものを見つけることができません

- ビューで使用する場合、次のように...

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

を、私はそれが思ったMicrosoft.AspNetCore.Mvc.Razorライブラリをインポートしようとしました開催されるが、それはそのように動作していないようです。私は、これはそれを行うかもしれないと思うの移行のドキュメントを見てみると

答えて

7

RC2のためのASP.NETチームで採用されたアプローチは、使用することです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

ユーザーの価値はどこから来ていますか? – Ciel

+0

私はこれを試して、 "ユーザー"が現在のコンテキストに存在しないと言います。 – Ciel

+0

これはおそらくRC2パッケージを使用していることが原因です:VSはまだRC1ツールに依存しており、ベースビューページクラスによって公開されているプロパティにアクセスすることはできません。あなたはこのエラーを無視しても問題ありません;) – Pinpoint

1

実際には、以前の回答は、「サインインされた」という意味に依存するため、必ずしも正しいとは限りません。コアでは、IPrincipalはClaimsPrincipalです。それはClaimsIdentity型のIdentityプロパティを持っていますが、これは単にIdentitiesプロパティコレクションの最初のオブジェクトです。これは、主に古いASP.NETの下位互換性のためです。新しい世界では、他のアイデンティティには正当なアイデンティティはありません...すべて有効です。

これらのIDのそれぞれには、IsAuthenticatedプロパティがあります。たとえば、匿名ユーザーに一部のクレームが添付されたまま匿名ユーザーを追跡しているIDを持つことができます。したがって、アイデンティティを作成したものは、IsAuthenticatedをfalseに設定している可能性があります。一方、Cookie認証の配管は、サインインメソッドを呼び出したときにそれをtrueに設定しますが、アプリの特定の部分がどのアイデンティティに注意を払っているかによって異なります。

また、RTMバージョンでは、IsSignedInはありません。

+0

Jeffは、MVC-APIで使用されている 'SignInManager.IsSignedIn(User)'(https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SignInManager.cs#L110)をチェックしました。コアテンプレート? 'ApplicationCookieAuthenticationScheme'がログインしたと見なされるようです。 –

+0

はい、今存在しています。ただし、Identityパッケージに依存することを前提としています。アイデンティティはユーザーデータの配管と永続性のすべてを処理できますが、独自のロールにしたい場合は、セキュリティだけが必要です。 –

関連する問題