it-swarm.com.de

Wie erhalten Sie eine Liste von Benutzern von ASP.NET Identity?

Edit: Diese Frage ist veraltet

Das Identity Framework war ein bewegendes Ziel, als ich das fragte. Die Autoren haben einige Dinge geändert und sie haben einige Dinge entkoppelt, was die Sache einfacher macht.

Schauen Sie sich das Asp.NET Identity Sample-Projekt auf github an.


Ich erstelle eine kleine Anwendung, die eine Benutzerverwaltung erfordert. Die Registrierung ist nicht zulässig, stattdessen gibt es einen Superbenutzer, der Anmeldeinformationen erstellt und ändert.

Ich verwende das neue Mitgliedschaftssystem ASP.NET Identity . Sicher ist das Erstellen von Benutzern und das Hinzufügen von Rollen einfach und intuitiv.

Nun meine Frage: Wie bekomme ich eine Liste von Benutzern, die die AuthenticationIdentityManager-Klasse verwenden, die von der generierten AccountController-Klasse verwendet wird? Ich konnte keinen Weg finden, auf die Benutzerliste von meinem Controller aus zuzugreifen.

(Übrigens, der neue Name "Identity" mag für manche Leute verblüffend klingen, aber es ist schwierig zu suchen.)

Edit: Wenn ich dies versuche

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

Ich bekomme eine Ausnahme Invalid column name 'Discriminator'. Die Definition von ApplicationDbContext wird automatisch vom neuen Anwendungsassistenten generiert:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Cobranzas.Models
{
    public class ApplicationUser : User
    {

    }
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {

    }
}

Meine Vermutung ist also, dass die Variable Discriminator zwischen ApplicationUser und User unterscheidet. Es ist jedoch nicht in meiner Datenbank vorhanden (die von der Anwendung automatisch erstellt wurde.)

37

Ich habe herausgefunden, dass ich das abgeleitete ApplicationUser-Objekt nicht für irgendetwas verwendet habe, also habe ich einfach weitergemacht und alle Verwendungszwecke für einfaches altes User geändert. Dann habe ich gerade die ApplicationDbContext-Definition für Folgendes geändert:

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

Und jetzt kann ich auf die Benutzerliste zugreifen:

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

Ich denke jedoch, dass dies wiederkommen wird und mich in Zukunft verfolgen wird (ich werde wahrscheinlich weitere Felder zu User hinzufügen müssen), so dass ich wahrscheinlich dieselbe Vorgehensweise wie in dieser Frage verwenden muss:

Rufen Sie alle Rollennamen in ASP.NET MVC5 Identity System ab

Edit: Da ich eine neue Eigenschaft hinzufügen musste, musste ich meine Änderungen rückgängig machen. Also ging ich voran und führte einen Vergleich der Linien mit dem ASP.NET-Identitätsbeispielprojekt durch und stellte fest, dass das generierte Projekt die folgende Zeile hatte:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore());

während die Beispielanwendung den Datenbankkontext in den Konstruktor aufgenommen hatte. Also habe ich es in meinem Konstruktor hinzugefügt, die Datenbank neu erstellt und das Problem wurde behoben.

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext()));
28
  1. Erstellen Sie standardmäßig ein ASP .NET MVC5-Projekt
  2. Erstellen Sie ASP .NET Identity-Tabellen ordnungsgemäß und ändern Sie auch Verbindungszeichenfolge .
  3. Um Benutzer zu erhalten, führen Sie einfach den folgenden Test aus A. Gehen Sie zu AccountController B. Erstellen Sie eine beliebige Dummy-Methode und legen Sie sie dort ab 
var context = new ApplicationDbContext();

var allUsers = context.Users.ToList();

enter image description here

15

Für RTM müssen Sie auf Ihre DbContext oder auf das, was Ihre spezifische Shopimplementierung hat, klicken, um alle Benutzer aufzulisten. In der nächsten Version werden wir höchstwahrscheinlich eine optionale IQueryable Users/Roles-Methode für die Manager-Klassen hinzufügen, die Stores implementieren können, um IQueryables für Benutzer und Stores verfügbar zu machen.

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

Wenn wir den folgenden Typ von Constructor in IdentityAccountController verwenden können.

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

dann können wir UserManager object direkt verwenden, um eine Benutzerliste zu erhalten

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