【发布时间】:2011-08-29 16:23:21
【问题描述】:
我创建了一个 ASP.NET MVC3 (Razor) Web 应用程序,并将成员资格提供程序替换为 MS 的通用成员资格提供程序,通过 NuGet 安装,并将 MDF 数据库替换为 SQL Server Compact 4 SDF 数据库。
这个 SDF 一切正常,我可以从 WSAT 管理用户和角色,在登录我的开发工作站时进行验证等。无论如何,我遇到了一些奇怪的行为,也许这只是其他用户遇到的问题:如一旦我将应用程序部署到生产服务器,如果我尝试使用任何用户帐户(大约有 60 个帐户)登录,我就会因密码无效错误而被拒绝。我还将 SDF 数据库下载回了我的开发机器,它适用于任何帐户。
我可以补充一点,我以编程方式从外部列表创建了所有帐户,代码如下:
MembershipUser user = Membership.GetUser(sName);
if (user != null)
{
Membership.CreateUser(sName, sPassword, sEmail);
AddUserToRole(sName, bIsAdmin? "administrator" : "member");
}
无论如何,他们在 WSAT 中看起来都还不错并且很活跃。
我尝试使用管理员帐户和成员帐户,但得到相同的结果。然而,数据库与我在本地成功使用的数据库相同。我还在一个页面上列出了所有用户帐户的锁定状态,以防万一,但它们看起来都很好,并且在线和本地都没有丢失。有什么提示吗?
我的配置是这样的:
...
<connectionStrings>
<clear />
<add name="ApplicationServices"
connectionString="Data Source=|DataDirectory|\Organizer.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
<add name="DefaultConnection"
connectionString="Data Source=|DataDirectory|\Organizer.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
...
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear />
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<profile defaultProvider="DefaultProfileProvider">
<providers>
<clear />
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<clear />
<add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
...
更新:在一些随机尝试中,我尝试将其中一个帐户设置为清晰的密码格式,而不是默认的散列密码格式,这有效,而所有其他未更改的帐户继续显示同样的问题。所以我必须推断出哈希密码在 SqlServer Compact 和/或我的 Web 配置中不起作用。有人知道 CF4 在这方面的问题吗?
【问题讨论】:
标签: sql-server asp.net-mvc-3 asp.net-membership