在 DNN API 中访问用户密码
本文关键字:用户 密码 访问 DNN API | 更新日期: 2023-09-27 18:34:01
我正在尝试使用 DNN API 访问用户的密码哈希。请参阅下面的代码段
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage Auth()
{
UserInfo u = DotNetNuke.Entities.Users.UserController.GetUserByName("user1");
string hostPassword = DotNetNuke.Entities.Users.UserController.GetPassword(ref u, String.Empty);
return Request.CreateResponse(HttpStatusCode.OK, hostPassword);
}
但是我收到以下错误,说无法检索散列密码
Parser Error Message: Configured settings are invalid: Hashed passwords cannot be retrieved. Either set the password format to different type, or set enablePasswordRetrieval to false.
这是我的配置部分
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SiteSqlServer" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0" requiresUniqueEmail="false" passwordFormat="Hashed" applicationName="DotNetNuke" description="Stores and retrieves membership data from the local Microsoft SQL Server database" />
谁能解释一下我的代码或配置有什么问题。?
此外,如果我想授权用户,我会在 DNN Web 服务中这样做吗?
找到了在 DNN 中对用户进行身份验证的可靠方法。可以通过以下方式对 DNN 用户进行身份验证。
System.Web.Security.Membership.ValidateUser(username,password)
DNN 中不允许检索已保存的密码,这也不是一种好的做法。这就是我的代码出现错误消息的原因。
也许更可靠的替代方案是在 DNN 基础架构中检查这一点:
public static bool IsValidUserAndPassword(string username, string password, out UserInfo user)
{
UserLoginStatus status = UserLoginStatus.LOGIN_FAILURE;
user = DotNetNuke.Entities.Users.UserController.ValidateUser(PortalSettings.Current.PortalId, username, password, "", PortalSettings.Current.PortalName, HttpContext.Current.Request.UserHostAddress, ref status);
return user != null && user.UserID != -1 && status == UserLoginStatus.LOGIN_SUCCESS;
}
用法:
UserInfo user;
if(IsValidUserAndPassword("username", "password", out user))
{
// User is valid
// Do whatever stuff here...
}