0

データベース内のユーザーの表示名が一意ではありません。唯一の一意の識別子は UserId です。

通常、次を使用してロールにユーザーを追加します。

Roles.AddUserToRole(user.Username, role);

しかし、ユーザー名がなくなったので、ロールに関連するすべての作業を再考する必要があります。

私が考えることができる厄介なオプションの 1 つは、SimpleMembershipProvider を満たすためだけにすべてのユーザーの Id を Username フィールドにコピーすることです。 . ただ、Users テーブルを偽の列で乱雑にする必要がないようにします。

ここで何か助けていただければ幸いです。

アップデート:

SimpleMembership を機能させるためuserIdに列にコピーしても、ユーザーを作成するにはユーザー名が必要です。username

  WebSecurity.CreateUserAndAccount(model.UserName, model.Password, etc)

そのため、自分のメンバーシップをロールバックする以外に、何をすべきか途方に暮れています。

再度更新:メール フィールドを抜き取り、ユーザー名列を使用して一意のメール アドレスを保存できることに気付きました。他にどのように対処できるか、私はまだ興味があります。

4

2 に答える 2

2

認証中にユーザーが自分自身を識別するために入力できる一意のものが必要です。それは、ユーザーが思いついたユーザー名、電子メールアドレス、PIN などです... UserProfile の一意の識別子として生成された番号をユーザーに記憶させるユーザーエクスペリエンスが良くないようです。したがって、追加の列を追加したくない場合は、そのユーザーを一意に識別するために使用されるものはすべて、ユーザーによるログイン プロセス中に使用され、ユーザー名列に格納できます。最新の更新から質問まで、ユーザーを識別するためにメールアドレスが使用されているようで、これをユーザー名列に問題なく保存できます。

UserProfile に列を追加するのは簡単です。ユーザー エクスペリエンスとセキュリティが向上するのであれば、私は躊躇しません。たとえば、表示名をキャプチャして Web サイトやユーザーとの通信に表示する場合は、電子メール列を追加し、WebSecurity のパラメーターを変更して、それを使用してユーザーを識別することを SimpleMembership に伝えることができます。 InitializeDatabaseConnection メソッド. パラメータuserNameColumnをメール列の名前に変更します。

于 2013-11-14T13:59:32.043 に答える
1

はい、ID をユーザー名として使用するか、メールがユーザー名として一意である場合に使用します。この状況では、厄介な方法ではありません。誰もuserIdを見ない場合は、IDを使用します。

于 2013-11-12T21:56:01.383 に答える