web-dev-qa-db-ja.com

ASP.NET Identityからユーザーのリストを取得する方法は?

編集:この質問は時代遅れです

アイデンティティフレームワークは、私がこれを尋ねた瞬間に動いていました。著者はかなり多くのことを変更し、他のいくつかを切り離して、すべてを簡単にしました。

githubのAsp.NET Identityサンプルプロジェクト をご覧ください。


ユーザー管理が必要な小さなアプリケーションを作成しています。登録は許可されていません。代わりに、ログイン情報を作成および変更するスーパーユーザーがいます。

新しい ASP.NET Identity メンバーシップシステムを使用していますが、ユーザーの作成とロールの追加は簡単で直感的です。

さて、私の質問:生成されたAccountControllerクラスによって使用されるAuthenticationIdentityManagerクラスを使用してユーザーのリストを取得する方法は?コントローラーからユーザーリストにアクセスする方法が見つかりませんでした。

(ちなみに、新しい名前「Identity」は一部の人にとっては素晴らしい音に聞こえるかもしれませんが、検索するのは苦痛です。)

Edit:これをやろうとした場合

ApplicationDbContext UsersContext = new ApplicationDbContext();
UsersContext.Users.ToList(); // Exception

例外が発生しますInvalid column name 'Discriminator'。 ApplicationDbContextの定義は、新しいアプリケーションウィザードによって自動的に生成されます。

using Microsoft.AspNet.Identity.EntityFramework;

namespace Cobranzas.Models
{
    public class ApplicationUser : User
    {

    }
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {

    }
}

したがって、Discriminator列はApplicationUserUserを区別するためのものだと思います。ただし、データベースには存在しません(アプリケーションによって自動的に作成されました)。

40

派生したApplicationUserオブジェクトを何にも使用していないことがわかったので、先に進み、単純な古いUserのすべての使用を変更しました。次に、次のApplicationDbContext定義を変更しました。

public class ApplicationDbContext : IdentityDbContext<
    User, UserClaim, UserSecret, UserLogin,
    Role, UserRole, Token, UserManagement>
{
}

そして今、私はユーザーリストにアクセスできます:

UsersContext = new ApplicationDbContext();
...
UsersContext.Users.ToList();

しかし、私はこれが戻って来て私を悩ませると思う(おそらくUserにさらにフィールドを追加する必要があるだろう)ので、おそらくこの質問と同じアプローチを使用する必要があります:

ASP.NET MVC5 IDシステムのすべてのロール名を取得

Edit:新しいプロパティを追加する必要があるので、変更を元に戻す必要がありました。そこで私は先に進み、ASP.NET Identityサンプルプロジェクトと1行ずつ比較しましたが、生成されたプロジェクトには次の行があることがわかりました。

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

一方、サンプルアプリケーションでは、コンストラクタにデータベースコンテキストが含まれていました。そこで、コンストラクタに追加し、データベースを再作成すると、問題はなくなりました。

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
30
  1. デフォルトでASP .NET MVC5プロジェクトを作成
  2. ASP .NET Identityテーブルを適切に作成し、接続文字列も変更します。
  3. ユーザーを取得するには、次のテストを行うだけです。A. AccountController Bに移動します。B.ダミーメソッドを作成してそこに配置します。
var context = new ApplicationDbContext();

var allUsers = context.Users.ToList();

enter image description here

15
Developer

RTMの場合、DbContextまたはすべてのユーザーを列挙する特定のストア実装にドロップダウンする必要があります。次のリリースでは、おそらくストアが実装できるManagerクラスにオプションのIQueryable Users/Rolesメソッドを追加して、ユーザーとストアの両方に対してIQueryablesを公開する予定です。

4
Hao Kung
using System.Linq;
using System.Data;
using System.Data.Entity;

        var db = new ApplicationDbContext();
        var Users = db.Users.Include(u => u.Roles);
2

ConstructorIdentityで次のタイプのAccountControllerを使用できる場合。

public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
      UserManager = userManager;
      AccessTokenFormat = accessTokenFormat;
}

public ApplicationUserManager UserManager
{
     get
     {
          return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
     }
     private set
     {
          _userManager = value;
     }
}

UserManagerオブジェクトを直接使用して、次のようなユーザーリストを取得できます。

var userList= UserManager.Users.ToList();
0
Bhavesh Patel