【问题标题】:How to get user info from ASPNETDB with stored procedures如何使用存储过程从 ASPNETDB 获取用户信息
【发布时间】:2011-10-25 02:22:48
【问题描述】:

在我的管理页面中,当管理员从网格视图中单击用户名时,我试图获取用户用户名、密码和电子邮件以重新填充控件。我似乎无法获得密码,因为它需要一个我找不到的参数(密码答案)。

我正在使用 ASPNETDB 数据库的存储过程。

 For Each usr As MembershipUser In Membership.GetAllUsers()
     Debug.Print(usr.Email)
     Debug.Print(usr.UserName)
     Debug.Print(usr.GetPassword("")) 'This line errors out
 Next

【问题讨论】:

  • 它是(此会员资格提供程序尚未配置为支持密码检索。)
  • 哦,我想我看到了问题所在。您必须在 web.config 中启用密码检索,默认情况下它是禁用的(请参阅下面的答案以获取示例)。

标签: asp.net sql-server


【解决方案1】:

您必须打开Membership.EnablePasswordRetrieval Property。这是来自 MSDN 的示例配置:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
  <providers>
    <add name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="SqlServices"
      enablePasswordRetrieval="true"
      enablePasswordReset="false"
      requiresQuestionAndAnswer="false"
      passwordFormat="Encrypted"
      applicationName="MyApplication" />
  </providers>
</membership>

请注意,您应该在 ASP.NET 应用程序的 Web.config 文件的 system.web 部分的 membership 部分中检查 enablePasswordRetrieval="true" 行。 p>

【讨论】:

  • 谢谢。我现在收到此错误(配置的设置无效:无法检索散列密码。将密码格式设置为其他类型,或将 enablePasswordRetrieval 设置为 false。)我没有使用 passwordFormat = "Encrypted",因为我得到了(您必须指定一个非自动生成的机器密钥以加密格式存储密码。)我认为这非常接近。
  • 这意味着您正在使用passwordFormat = "Hashed"。您必须使用Clear(纯文本)或Encrypted(在这种情况下,您必须设置machineKey 元素的decryptionKey 属性-有关passwordFormat 的更多信息,请参见this MSDN page
【解决方案2】:

文档说明您需要传递密码问题的答案才能接收密码。

【讨论】:

  • 我在没有问题或答案的情况下输入了几个测试用户。空值不应该工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2012-12-22
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多