web-dev-qa-db-fra.com

Comment obtenir une liste d'utilisateurs à partir de l'identité ASP.NET?

Edit: Cette question est obsolète

Le cadre d'identité était une cible mouvante au moment où j'ai posé la question. Les auteurs ont changé pas mal de choses et ils ont découplé plusieurs choses, facilitant les choses.

Jetez un coup d’oeil au projet Asp.NET Identity Sample sur github .


Je crée une petite application qui nécessite une gestion des utilisateurs. L'enregistrement n'est pas autorisé. Un super utilisateur créera et modifiera les informations de connexion.

J'utilise le nouveau système ASP.NET Identity membership et, bien sûr, créer des utilisateurs et ajouter des rôles est simple et intuitif.

Maintenant, ma question: Comment obtenir une liste d'utilisateurs à l'aide de la classe AuthenticationIdentityManager utilisée par la classe AccountController générée? Je ne pouvais pas trouver un moyen d'accéder à la liste des utilisateurs à partir de mon contrôleur.

(Au fait, le nouveau nom "Identity" peut sembler génial pour certaines personnes, mais il est difficile de chercher.)

Edit: Si j'essaie de faire ça

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

Je reçois une exception Invalid column name 'Discriminator'. La définition de ApplicationDbContext est générée automatiquement par le nouvel assistant d’application:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Cobranzas.Models
{
    public class ApplicationUser : User
    {

    }
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {

    }
}

Donc, je suppose que la colonne Discriminator sert à distinguer ApplicationUser de User. Cependant, il n’existe pas dans ma base de données (créée automatiquement par l’application).

37
Leonardo Herrera

J'ai découvert que je n'utilisais pas l'objet ApplicationUser dérivé pour quoi que ce soit, alors je suis allé de l'avant et j'ai changé toutes les utilisations de celui-ci pour tout simplement User. Ensuite, je viens de changer la définition de ApplicationDbContext pour ce qui suit:

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

Et maintenant je peux accéder à la liste des utilisateurs:

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

Cependant, je pense que cela reviendra et me hantera dans le futur (je devrai probablement ajouter plus de champs à User) donc je devrai probablement utiliser la même approche que dans cette question:

Obtenez tous les noms de rôle dans le système d’identité ASP.NET MVC5

Edit: Comme j'avais besoin d'ajouter une nouvelle propriété, je devais annuler mes modifications. J'ai donc procédé à une comparaison ligne par ligne avec le projet ASP.NET Identity Sample et constaté que le projet généré comportait la ligne suivante:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

tandis que l'application Sample avait inclus le contexte de la base de données dans le constructeur. Je l'ai donc ajouté dans mon constructeur, recréé la base de données et le problème a disparu.

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
28
Leonardo Herrera
  1. Créer le projet ASP .NET MVC5 par défaut
  2. Créez correctement les tables ASP .NET Identity et modifiez également chaîne de connexion .
  3. Pour que les utilisateurs fassent simplement le test suivant A. Allez à AccountController B. Créez n'importe quelle méthode fictive et mettez-la là 
var context = new ApplicationDbContext();

var allUsers = context.Users.ToList();

enter image description here

15

Pour RTM, vous devrez choisir DbContext ou quelle que soit l'implémentation spécifique de votre magasin pour énumérer tous les utilisateurs. Dans la prochaine version, nous ajouterons probablement une méthode IQueryable Utilisateurs/Roles facultative sur les classes Manager que les magasins peuvent implémenter pour exposer IQueryables à la fois pour les utilisateurs et les magasins.

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
Hossein Hajizadeh

Si nous pouvons utiliser le type suivant de Constructor dans IdentityAccountController.

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;
     }
}

alors nous pouvons directement utiliser l'objet UserManager pour obtenir une liste d'utilisateurs comme

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