2011-08-13 6 views
3

私はRazorプロジェクトに取り組んでおり、既存のユーザーデータベースをSimpleMembership ProviderのDBスキーマに統合する必要があります。これは、既存のUserテーブルを指定し、SimpleMembership APIがUsernameとUserIDに使用するカラムを指定することで行います。プロセスでWebSecurity.ChangePassword()をFAilにする原因は何ですか?

WebSecurity.InitializeDatabaseConnection("DB_ConnStr", "User", "UserId", "Username", true); 

しかし、私は私の既存のデータベース内の各ユーザーの行のための新記録とwebpages_Membershipテーブルを移入しています。これはうまくいっており、既存の各ユーザーの挿入を処理するコードを記述しました。

挿入時に、わかりやすくするためにダミーの暗号化されたパスワードトークンを使用し、すべてのユーザーに同じパスワードを設定します。次に、webpages_Membershipテーブル内の各ユーザーの正しいパスワードを設定するために、レコードに対して別のスクリプトを実行する必要があります。各ユーザーの

WebSecurity.ChangePassword(username, dummyPwd, newPwd) 

を、「NEWPWD」パラメータとして復号化された現在のパスワードを渡します。これは、既存のユーザーテーブルから現在のパスワードを解読し、その後の呼び出しが含まれます。

これは、100,000を超えるレコードに対して、これが呼び出されるケースの99%で正常に動作します。しかし、約40例で失敗している。

どのような理由でこのメソッドが失敗する可能性がありますか?

答えて

0

私の最初の推測では、新しいパスワードのハッシュが128文字の制限を超えている可能性があります。

ChangePassword呼び出しが失敗した場合、その例外の原因を詳細に知るために例外をキャッチできますか?

+0

例外はスローされません。メソッドは単にfalseを返します。 –

+0

もう少しソースコードを見ると、webpages_Membershipテーブルにユーザーが見つからない可能性があります。それを排除しよう。 'WebSecurity.ChangePassword()'呼び出しがfalseを返すケースを特定できれば、関連するユーザー名を取得し、 'Membership.GetUser(username)'がnull以外の値を返すことを確認できますか? –

関連する問題