2017-09-10 3 views
0

私のWeb APIプロジェクトではHttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Valueを使用して、認証に使用するリクエストユーザを取得しています。 NameIdentifierは現在のユーザーの電子メールを返しますが、Googleの検索ではユーザーのID(この場合、Guid、重要な場合)が返されるはずです。
なぜこのようなことが起こりますか、データベースの照会なしで現在のユーザーのIDを返すにはどうすればよいですか?ClaimTypes.NameIdentifierはIdではない電子メールアドレスを返します

+0

このアプリケーションではどのような認証メカニズムが使用されていますか? ClaimsPrincipalを作成したのは何ですか? .NET Core 2.0ですか? –

+0

はい、.NET Core 2.0です。私は認証のためにJwtBearerを使用しています。私はClaimsPrincipleに精通していないので、JwtBearerがそれを処理していると思いますか? –

+0

申し訳ありませんが、私は認証のためのアイデンティティ(jwtトークン用のJwtBeaerを使用しています) –

答えて

0

ASP.netコア2.0を使用している間、私はUserManagerによってCurrentUserを取得しようとしました。この

public ClaimsIdentity GenerateClaimsIdentity(string email, string id) 
{ 
    return new ClaimsIdentity(new GenericIdentity(email, "Token"), new[] 
    { 
     new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Id, id), 
     new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Rol, Helpers.Constants.Strings.JwtClaims.ApiAccess) 
    }); 
} 

などのJWTトークンを生成するので、私は同じ問題に直面してきましたが、それは常にnullを返します。このようなスタートアップファイルのUserIdClaimType文字列を "id"に変更すると考えました

var builder = services.AddIdentity<User,IdentityRole>(o => 
{ 
    // configure identity options 
    o.Password.RequireDigit = false; 
    o.Password.RequireLowercase = false; 
    o.Password.RequireUppercase = false; 
    o.Password.RequireNonAlphanumeric = false; 
    o.Password.RequiredLength = 6; 

    //this line 
    o.ClaimsIdentity.UserIdClaimType = "id"; 
}); 
関連する問題