私はASP.Net MVCが比較的新しいので、組み込みのユーザーログイン機能を今すぐ使用しようとしています。登録ビューでユーザーを登録できます。作成したユーザーでログインしようとすると、これも機能します。マスターページにリダイレクトされます。
しかし、現在のユーザーのUserIDを取得することはできません。 HomeControllerとAccountControllerでコードを試しましたが、両方とも機能しませんでした。最初の行のステートメントは常にnullを返します。
var userID = User.Identity.GetUserId();
if (!string.IsNullOrEmpty(userID))
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create()));
var currentUser = manager.FindById(User.Identity.GetUserId());
}
UserIDを取得する前に、他に何かする必要がありますか?
答えはコードの中にあります。これは何を返しますか?
var userID = User.Identity.GetUserId();
ASP.NET Identityを使用している場合、afterログイン(および別のページへのリダイレクト)の場合、IPrincipal.IIdentity
はClaimsIdentity
になります。これを試すことができます:
var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
// the principal identity is a claims identity.
// now we need to find the NameIdentifier claim
var userIdClaim = claimsIdentity.Claims
.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);
if (userIdClaim != null)
{
var userIdValue = userIdClaim.Value;
}
}
上記のコードブロックは正確ではありませんが、本質的にはIIdentity.GetUserId
拡張メソッドが行うことです。
これらのいずれも機能しない場合、ユーザーはまだ実際にサイトにログインしていない可能性があります。ログイン後、サーバーが認証Cookieをブラウザーに書き込む前に、別のページにリダイレクトする必要があります。このCookieは、User.Identity
がこの要求情報(NameIdentifier
を含む)をすべて保持する前に書き込まれる必要があります以降の要求。