가 나는 이름과 내가 만든 암호를 사용하여 로그인 할 수 그러나 로그인 포털Membership.ValidateUser 반환 : 널 (null)
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider" requiresQuestionAndAnswer="false" enablePasswordRetrieval="false" enablePasswordReset="true" connectionStringName="MembershipDB" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="1" applicationName="php" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
을 만들 AspNetSqlMembershipProvider에 사용, 내가 코드에 들어갔다 및 Membership.ValidateUser 반환을 발견 : 널 (null)
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
bool UserAuthenticated = false;
MembershipProvider AuthenticationProviderUsed = null;
RoleProvider roleProvider = Roles.Providers["SqlRoleProvider"];
// Try authenticating the user against each membership provider
foreach (MembershipProvider membershipProvider in Membership.Providers)
{
try
{
if (membershipProvider.ValidateUser(loginInitial.UserName, loginInitial.Password)) // here got null.
{
나는 데이터베이스를 확인 : 여기
는 코드입니다. 사용자 이름과 비밀번호가 모두 있습니다. 도움 주셔서 감사합니다.업데이트 : false를 반환합니다.
다음으로 MembershipUser user = Membership.GetUser(loginInitial.UserName);
사용자 신고 null
.
업데이트 : 더 많은 코드,
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
bool UserAuthenticated = false;
MembershipProvider AuthenticationProviderUsed = null;
RoleProvider roleProvider = Roles.Providers["SqlRoleProvider"];
// Try authenticating the user against each membership provider
foreach (MembershipProvider membershipProvider in Membership.Providers)
{
try
{
if (membershipProvider.ValidateUser(loginInitial.UserName, loginInitial.Password))
{
if (base.ConfigSettings.OperatingMode == ConfigurationSettingValues.OperatingModes.NoAccess)
{
if (!roleProvider.IsUserInRole(loginInitial.UserName, ConfigurationManager.AppSettings["AdminRole"]))
{
FormsAuthentication.SignOut();
return;
}
}
MembershipUser usrInfo = Membership.GetUser(loginInitial.UserName);
if (membershipProvider.Name == "ActiveDirectoryMembershipProvider")
{
System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet);
UserAuthenticated = true;
AuthenticationProviderUsed = membershipProvider;
break;
}
else
{
Int16 daysSincePwdChange = Convert.ToInt16(DateTime.Now.Subtract(usrInfo.LastPasswordChangedDate).TotalDays);
System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet);
if (daysSincePwdChange > SecurityUtils.DefaultPasswordExpiryInDays || usrInfo.Comment == "ChangePassword")
{
e.Authenticated = false;
Response.Redirect("~/admin/ChangePassword.aspx?UserName=" + Server.UrlEncode(loginInitial.UserName));
}
else
{
System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet);
UserAuthenticated = true;
AuthenticationProviderUsed = membershipProvider;
break;
}
}
}
else
{
// See if the user is locked out
MembershipUser user = Membership.GetUser(loginInitial.UserName);
if (user != null && user.IsLockedOut)
{
ErrorMessage.Text = "Your account is currently locked out. Please contact the system administrator.";
}
else
{
ErrorMessage.Text = "Invalid user name and/or password";
//Response.Write("Invalid User Name or Password");
}
}
}
catch (Exception ex)
{
LoggingLibrary.LogException(this.Logger, Context, ex, ex);
}
}
eror 메시지 : 사용자가 데이터베이스에 존재하는 경우 "잘못된 사용자 이름 및/또는 암호"
MemberhipProvider.ValidateUser는 bool을 반환합니다. 아마 false가 아닌 null이 리턴되었다는 것을 의미합니다. – santiagoIT
[Membership.ValidateUser] (http://msdn.microsoft.com/en-us/library/system.web.security.membership.validateuser.aspx)는 true 또는 false 만 반환 할 수 있습니다. –
전체 코드를 표시하지 않은 경우에도 ValidateUser가 true를 반환하는 경우 Membership.GetUser 만 호출한다고 가정합니다. 그래서 나는 ValidateUser가 false를 리턴하지만 Membership.GetUser가 null이라는 당신의 업데이트 된 질문을 이해하지 못한다. (당신은 정상적으로이 지점에 도착해서는 안된다.) –