13

リクエストを行ったユーザーのIDを取得する必要があります。以前のバージョンの Identity では、次のようにできました。

User.Identity.GetUserId();

しかし、もう手に入らないようです。

次のようなものもあります。

User.GetUserId();

ただし、User.Identity.IsAuthenticated が true で User.Identity.Name が正しく設定されていても、常に null を返します。

何を使用すればよいですか?

編集: 私の認証ロジックは[デフォルトの Visual Studio 2015 テンプレート]に基づいています。ID はこれまであまり変更していません。

4

6 に答える 6

19

以前のバージョンではそのための拡張メソッドが組み込まれていたと思いますが、削除されました。独自に実装して置き換えることができます。

using System;
using System.Security.Claims;
using Microsoft.AspNet.Identity;

namespace cloudscribe.Core.Identity
{
    public static class ClaimsPrincipalExtensions
    {
        public static string GetUserId(this ClaimsPrincipal principal)
        {
            if (principal == null)
            {
                throw new ArgumentNullException(nameof(principal));
            }
            var claim = principal.FindFirst(ClaimTypes.NameIdentifier);
            return claim != null ? claim.Value : null;
        }
    }
}

ClaimType.NameIdentifier はユーザー ID にマップする必要があります

于 2016-02-23T12:31:39.440 に答える
10

@ジョー・オーデット

別の場所に移動されていることがわかりました。

User.GetUserId => UserManager.GetUserId(User)
User.GetUserName => UserManager.GetUserName(User)
User.IsSignedIn => SignInManager.IsSignedIn(User)

詳細は github で

于 2016-06-02T20:47:01.830 に答える
9

私たちの議論によると、あなたのユーザー ID には、User.GetUserId() によって使用される正しいクレームが含まれていないようです。

NameIdentifier クレームを手動で設定する方法は次のとおりです。

// ClaimsIdentity identity = new ClaimsIdentity...

identity.AddClaim(ClaimTypes.NameIdentifier, user.Id);
于 2016-02-28T13:59:02.987 に答える
-2

User.Identity.GetUserId();を継承するクラス内で使用できますPage

于 2016-02-23T12:37:45.387 に答える
-3

使用することもできます

User.Identity.Name;

詳細については、MSDN を参照してください

https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx

于 2016-02-23T13:19:18.053 に答える