CustomerId と Email を 2 つのフィールド (とりわけ) として持つ Customer という名前のカスタム テーブルがあります。これを MVC4 サイトで使用したいと考えています。
DBRuWho という名前の単一の接続文字列があります。私の App_Start\AuthConfig.cs ファイルには、テーブルに初期スーパーユーザーをシードする CheckForSuperAdmin() というメソッドがあります。
internal static void CheckForSuperAdmin()
{
if (!WebMatrix.WebData.WebSecurity.Initialized)
{
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection("DBRuWho", "customer", "customerId", "email", true);
}
var roles = new WebMatrix.WebData.SimpleRoleProvider();
var users = new WebMatrix.WebData.SimpleMembershipProvider();
if (!roles.RoleExists("SuperAdmin"))
{
roles.CreateRole("SuperAdmin");
if (users.GetUser("superadmin@superadmin.com", false) == null)
{
users.CreateUserAndAccount("superadmin@superadmin.com", "P@ssw0rd53cR3t!");
roles.AddUsersToRoles(new[] {"superadmin@superadmin.com"}, new[] {"SuperAdmin"});
}
}
}
「ユーザーを登録」すると、webpages_Membership テーブルの行と同様に Customer 行が作成され、どちらも見栄えがします。ただし、上記の「var roles」行にブレークポイントを設定し、残りのメソッドをスキップした場合にのみ、ユーザーを登録できます。
次に、このユーザーを作成すると、ログインできません。パスワードが一致しません。
「var roles」で始まるコードをスキップしないと、例外が発生します。「WebSecurity」クラスの他のメソッドを呼び出す前に、「WebSecurity.InitializeDatabaseConnection」メソッドを呼び出す必要があります。
私がそのメソッドを呼び出していることがはっきりとわかるので、これはイライラします。呼び出された後、[ウォッチ] ウィンドウで確認すると、初期化されていることが示されています。
だから、ここで立ち往生しています.... この「シンプル」メンバーシップを使用したいのですが、単純に使用できないようです。
何かご意見は?私はたくさんの記事を読みましたが、すべてを正しく行っているように見えますが、明らかに何かが欠けています...
詳細情報: DBRuWho にマップされる接続文字列は次のとおりです。
<connectionStrings>
<add name="DBRuWho" connectionString="Server=localhost;Database=ruwho;integrated security=true" providerName="System.Data.SqlClient" />
データが挿入されるので、正しく接続していると確信しています。!roles.RoleExists をチェックすると、例外を乗り越えられないようで、ログインできません。
更新 -- Customer テーブルのすべてのデータと webpages_Membership テーブルのすべてのデータを削除しましたが、(起動時に !roles.RoleExists コードをスキップすると) ログインできます。スーパー管理者を作成するロール コードを使用しても、上記の例外が引き続き発生します。