162
  • MVC 5で現在ログインしているユーザーの ID を取得するにはどうすればよいですか? StackOverflow の提案を試しましたが、MVC 5 向けではないようです。
  • また、ユーザーに物を割り当てる MVC 5 のベスト プラクティスは何ですか? (たとえば、 aUserが必要です。 User を に格納する必要がありますItemsか? ナビゲーション プロパティを使用してクラスを拡張できますか?IdItemUserList<Item>

MVC テンプレートの「個々のユーザー アカウント」を使用しています。

これらを試しました:

'Membership.GetUser()' は null です。

4

9 に答える 9

319

ASP.NET MVC コントローラーでコーディングしている場合は、次を使用します

using Microsoft.AspNet.Identity;

...

User.Identity.GetUserId();

言及する価値がUser.Identity.IsAuthenticatedありUser.Identity.Name、上記のusingステートメントを追加しなくても機能します。しかし、GetUserId()それなしでは存在しません。

コントローラー以外のクラスにいる場合は、使用します

HttpContext.Current.User.Identity.GetUserId();

MVC 5 の既定のテンプレートでは、ユーザー ID は文字列として格納された GUID です。

ベスト プラクティスはまだありませんが、ユーザー プロファイルの拡張に関する有益な情報が見つかりました。

于 2013-08-26T19:15:44.257 に答える
28

次のようなものを試してください:

var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
var userManager = new UserManager<ApplicationUser>(store);
ApplicationUser user = userManager.FindByNameAsync(User.Identity.Name).Result;

RTM で動作します。

于 2013-11-06T13:09:23.307 に答える
7

Id の取得は非常に簡単で、これで解決しました。

ただし、2 番目の質問はもう少し複雑です。

したがって、これは現在すべてプレリリースのものですが、直面している一般的な問題は、ユーザーを新しいプロパティ (または質問の Items コレクション) で拡張する場所です。

すぐに使用できるファイルはIdentityModel、Models フォルダーの下にあります (執筆時点)。そこにはいくつかのクラスがあります。ApplicationUserApplicationDbContext。のコレクションを追加するには、これが Entity Framework で使用している通常のクラスである場合と同様に、クラスItemsを変更する必要があります。ApplicationUser実際、内部をざっと見てみると、ID 関連のすべてのクラス (ユーザー、ロールなど) が適切なデータ注釈を備えた単なる POCO であるため、EF6 とうまく連携していることがわかります。

AccountController次に、 DbContext を使用することを認識できるように、コンストラクターにいくつかの変更を加える必要があります。

public AccountController()
{
    IdentityManager = new AuthenticationIdentityManager(
    new IdentityStore(new ApplicationDbContext()));
}

ログインしているユーザーのユーザー オブジェクト全体を取得することは、正直言って少し難解です。

    var userWithItems = (ApplicationUser)await IdentityManager.Store.Users
    .FindAsync(User.Identity.GetUserId(), CancellationToken.None);

その行で作業が完了し、必要に応じてアクセスできるuserWithItems.Itemsようになります。

HTH

于 2013-10-14T12:44:51.370 に答える
0

私はあなたの痛みを感じます、私は同じことをしようとしています. 私の場合、ユーザーをクリアしたいだけです。

すべてのコントローラーが継承する基本コントローラー クラスを作成しました。その中で、オーバーライドOnAuthenticationして設定しますfilterContext.HttpContext.User to null

それは私がこれまでに管理した中で最高です...

public abstract class ApplicationController : Controller   
{
    ...
    protected override void OnAuthentication(AuthenticationContext filterContext)
    {
        base.OnAuthentication(filterContext); 

        if ( ... )
        {
            // You may find that modifying the 
            // filterContext.HttpContext.User 
            // here works as desired. 
            // In my case I just set it to null
            filterContext.HttpContext.User = null;
        }
    }
    ...
}
于 2013-10-16T01:23:39.927 に答える
0

.Net MVC5 コア 2.2 では、 HttpContext.User.Identity.Name を使用します。それは私のために働いた。

于 2019-08-28T02:48:58.770 に答える