0

我正在使用 ASP.NET MVC4 和 SQL Azure 编写一个 Web 应用程序。我使用表单身份验证和会员库。在生产中,网站从 Azure 中的 Web 角色服务运行。

当我从开发环境注册新用户时,从生产环境登录失败,反之亦然。使用我在同一环境中创建的一些用户和密码登录成功。我知道这听起来像是开发和生产中的不同配置,但是我验证了它们都可以使用相同的数据库,并且还验证了来自两个源(开发和生产)的用户详细信息都写入了相同的表('users' 和'会员”)。

这是 CreateUser 命令:

MembershipUser user = Membership.CreateUser(model.Email, model.Password, model.Email, null, null, true, null, out createStatus);

这是失败的登录命令:

if (Membership.ValidateUser(model.Email, model.Password))

谢谢。

4

2 回答 2

1

配置文件中的“applicationName”是否相同?

如下所示: applicationName="MyApplication"

   <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
        <add 
          name="SqlProvider" 
          type="System.Web.Security.SqlMembershipProvider" 
          connectionStringName="MySqlConnection"
          applicationName="MyApplication"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          requiresUniqueEmail="true"
          passwordFormat="Hashed" />
      </providers>
    </membership>

另一种解决方法。当您通过不同的环境时,查询表并确保 ApplicationId 正在“排队”。

select [ApplicationId]  , [UserId] , [Email] from [dbo].[aspnet_Membership] where  [Email] = 'bill.gates@hotmail.com'
于 2013-05-03T14:35:03.733 回答
1

最有可能的是,开发和生产具有不同的 MachineKey。MachineKey 用于生成哈希,因此不同的密钥意味着密码不起作用。

在两者中明确设置 web.config 中的 MachineKey。

http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations

于 2013-05-03T14:35:42.300 回答