2014-01-20 10 views
12

I MVC 5:ユーザーをIdentityUserクラスから継承する必要がありますか?

がモデルでEntity FrameworkのコードファーストToDoのモデルを作成します

、このtutorialにAsp.Netアイデンティティと を学ぶしようとしていた\ AppModels、CS一部 IdentityUserクラスから MyUserクラス 継承と MyDbContext継承 IdentityDbContext<MyUser>からクラス。何故ですか?

私のWebアプリケーションのユーザーのすべての情報を保持するUserクラスがあります。そのクラスはIdentityUserから継承する必要があります。DbContextIdentityDbContext<User>から継承する必要がありますか? MVC 4で行われるよう無地DbContextクラス上IdentityDbContext<TClass>からinheritng dbcontextクラスの利点は何も

は、

+2

IdentityUserとIdentityDbContextから継承する場合、MicrosoftのUserStoreクラスを使用して余分な作業をすることなく永続性を管理することもできます。それ以外の場合は、自分で作成したUserStoreを最初から実装することになります。 – OdeToCode

答えて

19

ASP.Net MVC 5.0は、プラグアンドプレイのためOWINのimplemenationを使用します。

はにすべての ユーザーが必要ですたIUserインタフェースを実装する必要があり、この

FROM Scott Allen Article

enter image description here

たIUser

ユーザーオブジェクト、ために設計されたインターフェースのカップルがあります少なくともIDと名前が必要です。 の最も顕著な側面IUserはstring型のIdプロパティです。文字列はGUIDの にはうまくいきますが、 SQL Serverでよく見られるように、整数をキーに使用するとちょっとしたことがあります。将来の投稿の詳細。コアアイデンティティアセンブリ内

IUserStore

I *ストア・インターフェースは、機能のさまざまなレベルを提供するために織り込まれています。作成、取得、更新、および(CRUD)機能を削除 -

IUserStoreは、ユーザー のためにしたいと思います最低限の機能を定義します。 ウェブサイトでパスワードを使用してローカルアカウントを作成できるようにしたい場合は、 のコンポーネントにIUserPasswordStore(これは IUserStore)を実装する必要があります。サードパーティのログイン(TwitterとFacebook、 の例)では、IUserLoginStoreを追加し、クレームの保存には IUserClaimStoreがあります。また、上のクラス図には示されていませんが、役割(IRole、IUserRoleStoreなど)のためのインターフェイスのコレクションは です。 ロール対討論が開始されるようにしましょう。

のUserManager

UserManagerが具象クラスであり、それは、ユーザ情報を操作するためのドメイン・ロジックを提供するのUserManagerあります。 UserManagerは、パスワードをハッシュするタイミング、ユーザーを検証するタイミング、およびクレーム管理方法を認識します。

UserManagerにはいくつかの拡張ポイントがあります。たとえば、カスタムのユーザーバリデータ(IIdentityValidatorを実装するオブジェクト)、カスタムパスワードバリデーター、およびカスタムパスワードハッシャーを設定するために使用できる多数のプロパティーがあります。主な拡張ポイントは、UserManagerコンストラクターを使用することです。これにより、IUserStoreを実装するすべてのオブジェクトを渡すことができます。 UserManagerを使用してSQL Serverに格納されているユーザー情報を管理する場合は、あらかじめ作成されたクラスを参照して後で説明しますが、ドキュメントデータベースなどで作業するIUserStoreを作成することも簡単ですストレージの形態。

IUserStoreは、ユーザーパスワードの操作方法を知らないため、IUserPasswordStoreのみがパスワードを知っています。 UserManagerは異なるコアインターフェイスを認識しており、コンストラクタで指定されたストアオブジェクトの機能を使用して動作しようとします。たとえば、FindByIdAsyncを使用する場合、UserManagerはユーザーストアを使用してユーザーをIDで照会できますが、FindAsync(ユーザー名とパスワードを使用します)を呼び出し、基礎ストアがIUserPasswordストアインターフェイスを実装していない場合、 UserManagerは強制的に例外をスローします。

ユーザーからパスワード、クレームまでのすべてに単一の具体的なクラスを使用するのは難しく、トレードオフが必要です。今後の記事のトレードオフについても見ていきます。

EDIT:それが文字列だった前Implementing ASP.Net Identity

をチェックアウト今ASP.Netのアイデンティティは、一般的なIdentityUser<TKey>をサポート、つまりユーザーIDは、文字列

+0

IUserには、ユーザークラスで上書きして新しいユーザーを作成すると、文字列型のIdがあります。このIDはどのように割り当てられますか? – Cybercop

+1

アイデンティティ・フレームワークの次のバージョンのプレリリースNuGetを見てください。このリリースでは、IdentityUser が使用されています.TKeyは主キーのタイプを指定し、intを使用できるようにします。 – OdeToCode

2

IdentityDbContext <た>クラスはDbContextから継承したクラスであります通常はそうしていますが、ロールとユーザーの準備が整ったDbSetsを提供します。

がここにクラスのドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.entityframework.identitydbcontext%28v=vs.111%29.aspx

はい、ユーザーDTOがIdentityUserから継承する必要がありますし、あなたのユーザーに関連付けられているデータベースにしたい任意の追加フィールドは、そのクラスに追加することができます。

これにより、ユーザーに関連付けられたデータベースにフィールドを追加するのがはるかに簡単になります。また、Entity Frameworkの移行とデータベースの初期化を使用している場合は、DbContextからIdentityデータベース全体を生成できるようになります。

関連する問題