私はASP.NET MVC 3 Webサイトを作成しています。これは私のカスタムのMembershipProvider(唯一のvalidateUserが実現)である:ログオンアクションのIIS 7.0でカスタムMembershipProviderとRoleproviderを使用する
public class RFMMembershipProvider : MembershipProvider
{
IUserService userService = new UserService();
public override bool ValidateUser(string username, string password)
{
return password.GetHashCode().ToString() == userService.GetUser(username).Pass;
}
...
}
と私のRoleprovider(のみGetRolesForUserを実現)
public class RFMRoleProvider : RoleProvider
{
IUserService userService = new UserService();
public override string[] GetRolesForUser(string username)
{
return new string[] { userService.GetRolesForUser(username).Name };
}
...
}
私のweb.config一部
...
<system.web>
<roleManager enabled="true" defaultProvider="RFMRoleProvider">
<providers>
<clear/>
<add name="RFMRoleProvider" type="RFMSite.WebUI.RFMRoleProvider, RFMSite"/>
</providers>
</roleManager>
<membership defaultProvider="RFMMembershipProvider"
>
<providers>
<clear/>
<add name="RFMMembershipProvider"
type="RFMSite.WebUI.RFMMembershipProvider, RFMSite"
/>
</providers>
</membership>
<authentication mode="Forms" >
<forms loginUrl="~/Account/LogOn" timeout="2880">
</forms>
</authentication>
:
...
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, true);
return RedirectToAction("Files", "Admin");
}
...
return View();
質問はなぜ私がIIS 7.0でサイトを公開するときですMembership.ValidateUser(username, password)
は常にfalseを返しますか?ローカルasp.net開発サーバーで正常に動作します。 MSSQL Serverとの接続はOKです(ウェブサイトの展開時にデータを取得して表示できます)。例外は発生せず、常にfalseを返します。
私はpass.GetHashCode()ToString()と実際にデータベースにデータを書き込みます。私はそれが悪い考えであると理解しています。そのような解決策は一時的です。そして、GetHashCode()メソッドは、IISでdelpoyedされたときに別の文字列を返すことを意味しますか? –
私は、GetHashCodeの実装はあなたが頼りにするべきものではないことを意味します。フレームワークのさまざまなバージョン、エディション、アーキテクチャなどが変更することができます。これは完全に実装レベルの内部的な詳細です。それ以外にも、これらのハッシュコードはユニークではありません。衝突はハッシュテーブルの通常の部分なので、同じバケットにハッシュする複数のパスワードを簡単に作成できます。 –
ええ、great thanx !!あなたは本当に正しかった! GetHashCode()fjr Webサイトがiisとasp.net webdevサーバーでホストされている場合、同じ文字列が異なる値を返します –