2016-08-09 18 views
3

このチュートリアルを使用して、WebAPI 2でMySQL Identityを使用してトークン認証を設定しようとしています。Web API 2.0 MySQL Identityプロバイダ、AuthContextを使用していますか?

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

残念ながら、この例では、Entity Frameworkのを使用し、私は(それも可能な場合)のMySQLでそれが今まで私ができる場所代用しようとしています。

これまでに手順5に進み、認証リポジトリを作成しました。これは与えられた例です:

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(); 

    } 
} 

私はUserUserをMySQLUserManagerに置き換えましたが、私はAuthContextを作成できません。 誰かが私が何を参照しなければならないか、または交換する必要があるかを知っていますか?

たぶん私も私のIdentityConfig.csのように、それを参照する必要はありませんが、私が唯一持っているファイル:私は、アプリケーションのユーザーが必要な場合は

 //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>()); 

(このチュートリアルhttp://blog.developers.ba/asp-net-identity-2-1-for-mysql/をオフに基づいて)、私は何とかそれを渡す必要がありますか?

私はチュートリアルを再読し、このスニペットを読んだところ、何らかの接続文字列であるようです。

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

どうすればいいですか?

+0

エンティティフレームワークはデータベースではなくORMであり、多くの異なるデータベースで動作します。接続文字列を変更する必要のある別のデータベースを使用する* N OT * ORM。 MySQLのサイト、[EF 6 Support](https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60)で、EFでMySQLを使用する方法を知ることができます。html)の章 –

+0

私はEFをMySQLに置き換えて友人と一緒に働かせるようにしました(スタートアップコードの順序に関するチュートリアルに間違いがありました。彼は注文を投稿します) – Memhave

+0

彼は答えを投稿します* – Memhave

答えて

-1

MySQLバックエンド(NOT Entity Framework)を使用してWeb API 2.xを使用する場合。

AuthRepositoryクラスでは、AuthContextの必要はありません。単純にユーザーマネージャーを次のように宣言します。 _userManager = new UserManager(新しいUserStore());

ApplicationUserManager内のCreateメソッドと同様に、DbContextを参照するユーザーストアを作成すると(これはAuthContextと呼ばれます)。

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

これはデフォルトの実装に含まれていました。このチュートリアルに基づいて: http://blog.developers.ba/asp-net-identity-2-1-for-mysql/

DbContextを渡す必要はありません。

(チュートリアルの間違いがStartup.csクラス内でもあり、これが最初でなければならない、そうでなければ、認証することができません。

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

    } 
} 

編集:いくつかの混乱があった表示されます私は、接続を変更しました。文字列をMySQL接続文字列に関連付け、MySQLチュートリアルでリンクされているので、次のようになります。

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

EFはデータベースではありません。これは、SQL Serverと同様にMySQLで動作します。 * ORMがこれを抽象化したときにMySQLへの依存関係をハードコーディングしたいのはなぜですか?なぜ単に接続文字列を変更しないのですか?特定の問題が発生しましたか、インターネットで見つかったことに従っていますか? –

+0

データベースも作成されているため、これはEFコードファーストアプローチではなく、データベースファーストのアプローチでした。アイデンティティのためにMySQLデータベースを使用するために接続文字列を変更しました。私はチュートリアル(質問自体に記載されている)に従っているので、特定の問題に遭遇しました。私は解決策をまとめました(私が従ったチュートリアルの間違いに関して、疑問に遭遇した誰かのために言及しました)。 – Memhave

+0

EFは、コードファーストが利用可能になる前にデータベースを先に使用しました。チュートリアルに問題があった場合は、問題はライブラリではなくチュートリアルでした。人々はずっと前にこのバグに気付いていたでしょう。 –

関連する問題