【问题标题】:What reasons could cause WebSecurity.ChangePassword() to FAil?什么原因会导致 WebSecurity.ChangePassword() 失败?
【发布时间】:2011-08-13 11:29:15
【问题描述】:

我正在处理 Razor 项目,需要将现有的用户数据库集成到 SimpleMembership 提供程序数据库架构中。这是通过指定我现有的用户表以及 SimpleMembership API 将哪些列用于用户名和用户 ID 来完成的。

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

不过,在此过程中,我正在为现有数据库中的每个用户行填充一条新记录的 pages_Membership 表。这很好,我已经编写了一些代码来处理每个现有用户的插入。

在插入过程中,为了简单起见,我使用了一个虚拟的加密密码令牌,并将密码设置为每个人都相同。然后我需要在记录上运行另一个脚本来为 pages_Membership 表中的每个用户设置正确的密码。这涉及从现有的用户表中解密当前密码,然后调用:

WebSecurity.ChangePassword( username, dummyPwd, newPwd) 

在每个用户上,将解密的当前密码作为“newPwd”参数传递。

这在 99% 的调用情况下都能正常工作 - 超过 100,000 条记录。但它在大约 40 个案例中失败了。

什么原因会导致此方法失败?

【问题讨论】:

    标签: membership-provider webmatrix razor


    【解决方案1】:

    我的第一个猜测是新密码的哈希值可能超过了 128 个字符的限制。

    当 ChangePassword 调用失败时,是否可以捕获异常以获取失败背后的详细信息?

    【讨论】:

    • 没有抛出异常,该方法只是返回false。
    • 再查看源代码,另一种可能是在 pages_Membership 表中找不到用户。让我们排除它。如果您能识别出WebSecurity.ChangePassword() 调用返回false 的情况,您能否获取关联的用户名并验证Membership.GetUser(username) 是否返回非空值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2010-11-14
    • 1970-01-01
    • 2018-06-03
    • 2013-09-13
    相关资源
    最近更新 更多