web-dev-qa-db-ja.com

ASP.Net IdentityターゲットDBの設定方法

Asp-Teamの ASP.NET Identity Sample を使用しており、IdentityDbContext...のデータベースを変更しようとしています。

コンストラクターで試しました

public MyDbContext() : base("MyConnectionString") { } // base is IdentityDbContext

dbContextクラスのように。

ユーザーを登録しようとするまでうまくいきます...

await IdentityStore.CreateLocalUser(user, model.Password)

false...を返します。エラーなし、何もありません。

それを修正する方法はありますか?

編集:

ファイル名はModels\AppModel.cs、 そこには MyDbContext class

元々は

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
}

に変更しました

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MyConnectionString") { }
}

私は同じものを使用している他のプロジェクトを持っているので、接続文字列は機能しています、そして、彼らはうまく動きます。

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
23
Nefarion

新しいmvc5アプリケーションのVS2013に付属する1.0バージョンでは、答えはもう有効ではありません。今これを行うには:

次のようなクラスを宣言します。

public class AppUserStore : UserStore<IdentityUser>
{
    public AppUserStore():base(new MY_IDENTITYDBCONTEXT())
    {

    }
}

そして、Startup.Auth.csの変更時に

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());    

UserManagerFactory = () => new UserManager<IdentityUser>(new AppUserStore());

これがないと、asp.net IDでユーザーを作成するときにIdentityDbContextコンストラクター(およびOnModelCreatingなど)が実行されません。

5
Leo

私は同じ問題を抱えていて、ASP.NET Identityに関する情報がまだネットにあまりないので、少し苦労しました。アセンブリの確認を行った後、実際に簡単であることがわかりました。

AuthenticationIdentityManagerが初期化されている場所を見つけ、IdentityStoreオーバーロードを使用して、次のようにdbコンテキストを指定します。

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new Model()));

モデルクラスはDbContextを継承します。お役に立てれば。

2
Joao de Araujo

RobMには包括的な答えがあり、Rob Bには簡単な答えがあります。

このシナリオでは、構成ファイルに存在しない「MyConnectionString」にベースを設定しています。

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MyConnectionString") { }
}

ConnectionStringに付ける名前は、DbContextにあるものと一致する必要があります。

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MySailorContext") { }
}
2
Terri

必要なのがIDプロバイダーによって使用される接続文字列を変更することだけである場合、以下はあまりエレガントではありませんが、動作するようです。 IdentityManagerクラスがインスタンス化される場所を検索し、次を追加します。

//Leave this untouched:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
//...and add this:
((IdentityStore)identityManager.Store).DbContext.Configuration
    .Database.Connection.ConnectionString = "your connection string here";
1
Konamiman

IdentityDbConectを継承するクラスを探します。例:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }
    }

次に、「DefaultConnection」をweb.configで識別された接続文字列の名前に変更します。

1
Rob Bowman

RTMに行くときにこれに多くの変更があるため、すべてのIDサインインなどにWebApiコントローラーを使用するSPAテンプレートを更新しました。あなたがそれを見たことがないなら、それは本当にクールなテンプレートです。

ここにすべてのコードを入れます: https://github.com/s093294/aspnet-identity-rtm/tree/master

(注意してください、それはインスピレーションのためだけです。私はそれを動作させただけで、それ以上は何もしませんでした。適切にバグを1つまたは2つ持っています)。

1