2016-08-09 226 views
3

Ich versuche, Token-Authentifizierung mit ASP.NET-Identität in einem WebAPI 2 mit einem MySQL-Backend einzurichten, das dieses Tutorial verwendet.Web API 2.0 Verwenden von MySQL Identity Provider, AuthContext?

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

Leider verwendet dieses Beispiel Entity Framework und ich bin versucht, es zu ersetzen, wo immer ich kann mit MySQL (wenn es überhaupt möglich ist).

Ich bin so weit zu Schritt 5 gekommen, ein Authentifizierungsrepository zu erstellen. Dies ist das Beispiel gegeben:

public class AuthRepository : IDisposable 
{ 
    private AuthContext _ctx; 

    private UserManager<IdentityUser> _userManager; 

    public AuthRepository() 
    { 
     _ctx = new AuthContext(); 
     _userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(_ctx)); 
    } 

    public async Task<IdentityResult> RegisterUser(UserModel userModel) 
    { 
     IdentityUser user = new IdentityUser 
     { 
      UserName = userModel.UserName 
     }; 

     var result = await _userManager.CreateAsync(user, userModel.Password); 

     return result; 
    } 

    public async Task<IdentityUser> FindUser(string userName, string password) 
    { 
     IdentityUser user = await _userManager.FindAsync(userName, password); 

     return user; 
    } 

    public void Dispose() 
    { 
     _ctx.Dispose(); 
     _userManager.Dispose(); 

    } 
} 

I ersetzt Usermanager für MySQLUserManager, aber ich kann keine AuthContext machen. Weiß jemand, was ich referenzieren oder ersetzen muss. Ich brauche es nicht einmal referenzieren, wie in meinem IdentityConfig.cs Datei Ich habe nur

Vielleicht:

 //Old entity framework stuff 
     //var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 

     //shiny new mysql stuff 
     var manager = new ApplicationUserManager(new MySqlUserStore<ApplicationUser>()); 

(basierend off dieses Tutorial http://blog.developers.ba/asp-net-identity-2-1-for-mysql/)

Wenn ich eine Anwendung Benutzer benötigen, Soll ich es irgendwie weitergeben?

Ich habe das Tutorial erneut gelesen und stieß auf dieses Snippet. Es scheint sich um eine Verbindungszeichenfolge zu handeln.

<connectionStrings> 
<add name="AuthContext" connectionString="Data Source=.\sqlexpress;Initial Catalog=AngularJSAuth;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Was könnte oder sollte ich es ersetzen?

+0

Entity Framework ein ORM ist, keine Datenbank es ist mit vielen verschiedenen Datenbanken funktioniert Wenn Sie wollen. Verwenden Sie eine andere Datenbank, sollten Sie die Verbindungszeichenfolge ändern, * N OT * das ORM. Wie Sie MySQL mit EF auf der MySQL-Website verwenden können, erfahren Sie im [EF 6 Support] (https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60).html) Kapitel –

+0

Ich habe es geschafft, es mit einem Freund arbeiten lassen, EF durch MySQL ersetzen (es gab einen Fehler in der Anleitung in Bezug auf Startup-Code Reihenfolge und so wird er eine Bestellung aufgeben) – Memhave

+0

Er wird eine Antwort * – Memhave

Antwort

-1

Wenn Sie die Web-API 2.x mit einem MySQL-Backend (NOT Entity Framework) verwenden möchten.

In der Klasse AuthRepository ist kein AuthContext erforderlich, deklarieren Sie den Benutzermanager einfach als: _userManager = neuer UserManager (new UserStore());

Ähnlich wie bei der Methode Create im ApplicationUserManager, wenn Sie einen Benutzerspeicher erstellen, verweisen Sie auf den DbContext (in der Frage wurde dies der AuthContext genannt).

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 

Dies war in der Standardimplementierung enthalten. Basierend auf diesem Tutorial: http://blog.developers.ba/asp-net-identity-2-1-for-mysql/

Sie müssen keinen DbContext übergeben.

(Es im Tutorial auch ein Fehler, in der Startup.cs Klasse dieser erste sein, sonst kann man nicht authentifizieren:

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureAuth(app); 
     HttpConfiguration config = new HttpConfiguration(); 
     WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 

    } 
} 

Edit:. Scheint es einige Verwirrung gab es ich die Verbindung geändert String in einer MySQL-Verbindungszeichenfolge, wie pro die Identität mit MySQL Tutorial verknüpft, so dass es sollte wie folgt aussehen:.

<add name="DefaultConnection" connectionString="Server=localhost; 
Database=aspnetidentity;Uid=radenko;Pwd=somepass;" providerName="MySql.Data.MySqlClient" /> 
+0

EF ist keine Datenbank. Es kann mit MySQL genauso wie mit SQL Server arbeiten. * Warum * wollen Sie eine Abhängigkeit zu MySQL fest codieren, wenn das ORM das abstrahiert? Warum nicht einfach die Verbindungszeichenfolge ändern? Sind Sie auf ein bestimmtes Problem gestoßen oder verfolgen Sie etwas, das Sie im Internet gefunden haben? –

+0

Die Datenbank wurde auch erstellt, also war dies ein Datenbank-First-Ansatz, und nicht der EF-Code-First-Ansatz. Ich habe die Verbindungszeichenfolge geändert, um eine MySQL-Datenbank für Identity zu verwenden. Ich bin auf ein bestimmtes Problem gestoßen, als ich einem Tutorial folgte (wie in der Frage selbst erwähnt). Ich habe eine Lösung zusammengestellt (und erwähnt, dass jeder über die Frage stolpert, was den Fehler in dem Tutorial angeht, dem ich gefolgt bin). – Memhave

+0

EF verwendete Datenbank zuerst, bevor der Code zuerst verfügbar wurde. Wenn Sie ein Problem mit einem Lernprogramm hatten, war das Problem wahrscheinlich das Lernprogramm, nicht die Bibliotheken. Die Leute hätten den Fehler vor langer Zeit bemerkt. –