2011-07-29 49 views
0

我使用asp.net成员资格提供商与MySQL和iis7,并没有问题很长一段时间与用户登录。但现在突然用户无法登录我不确定发生了什么。一些兴趣点是:用户不能再登录 - 与asp.net会员供应商与mysql

- 我试图实现更改密码和重置密码功能,当发生这种情况。我所做的只是拖放了这些功能的控件并设置了smtp。当这些重置密码不起作用时,我添加了一个额外的成员标签,如下所示:http://peterkellner.net/2007/02/15/resetpasswordaspnet/。但我删除它,据我所知,我的web.config与以前一样。

- 我读过如果应用程序名称未在web.config中指定,则可能发生这种情况。我的web.config有applicationName =“/”

- 我不确定如何使用事件查看器来帮助找出问题。当我尝试登录时,我没有看到任何失败的登录尝试。也许我不是找对了地方

-The用户试图登录不锁定

- 如果我创建一个新帐户,我无法登录到该帐户要么!

- 这很奇怪,但有一个很久以前我创建的帐户,我可以登录到那个!

- 这是我的web.config的部分,可能是相关的:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login.aspx" timeout="2880"/> 
</authentication> 
<membership defaultProvider="MySQLMembershipProvider"> 
    <providers> 
    <clear/> 
    <remove name="MySQLMembershipProvider"/> 
    <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="MySQL default application" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="False" requiresUniqueEmail="True" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> 
    </providers> 
</membership> 

请帮帮忙!我已经把我的头发拉了几天了!感谢您的关注!通过这个

+0

你是否可能改变你的连接字符串(LocalMySqlServer)或关于散列的设置(在web.config中显示它默认为SHA1)? – Yahia

+0

@Yahia:谢谢你的回复。我没有改变那些。 – coder

+0

然后你将不得不调试失败的登录和成功的登录,看看有什么不同... – Yahia

回答

0

让我们的工作:

  1. 成员提供商将使用密码的盐渍SHA1哈希。
  2. 假设您尚未实现自定义提供程序(顺便说一句 - 这就是哈希值不同 - 盐类不同的原因),salt和哈希存储在表aspnet_Membership中,
  3. 登录时,成员资格提供程序会将记录中的盐与你输入的密码进行哈希,然后比较结果

你需要记住的是,散列是确定性的,所以每次散列相同的输入(纯文本密码加散列),你会得到相同的输出。你的情况明显发生的是你要么没有创建相同的哈希密码(可能是错误的盐),要么你没有将哈希输出与正确的值进行比较。当我说“你”时,显然它是照顾这件事的会员供应商,由于配置改变,它的行为有点不同。

那么这可能出错哪里?以下是一些需要检查的内容:

  1. 实际上是否从MySql中撤回了正确的成员资格记录?使用MySql profiler进行检查。
  2. 如果您尝试使用该帐户的正确salt手动散列密码,它是否与数据库中的密码相匹配?请参阅this question以重现散列过程。

基本上,只需将过程分解为更小的单位并验证每个过程是否正常工作。祝你好运!