C# Membership.ValidateUser返回:null
我使用AspNetSqlMembershipProvider创建登录门户C# Membership.ValidateUser返回:null,c#,asp.net,C#,Asp.net,我使用AspNetSqlMembershipProvider创建登录门户 <membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <remove name="AspNetSqlMembershipProvider"/> <add name="AspNetSqlMembershipProvider&quo
<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"/>
我检查了数据库。用户名和密码都在那里。
谢谢你的帮助
更新:返回false。
然后MembershipUser=Membership.GetUser(loginInitial.UserName)代码>用户返回null
再次更新:更多代码,
eror消息是:“无效用户名和/或密码”您应该做的第一件事是检查数据库中是否存在该用户。
您可能正在使用两个不同的数据库,一个用于本地,另一个用于生产。
能否显示AspNetSqlMembershipProvider的连接字符串
*编辑*
我不是连接字符串方面的专家,但在我看来,您运行的是sql compact db。我将使用vs或sql manager中的服务器资源管理器连接到db,检查aspnet_Users表,并验证您的用户是否存在
您是在本地测试还是在生产机器上测试?如果在生产环境中,它是否在本地工作?MembershipProvider.ValidateUser返回布尔值。你可能是说它返回了false,而不是null。只能返回true或false。即使您没有显示完整的代码,我假设您仅在ValidateUser返回true时调用Membership.GetUser。所以我不理解您更新的问题,您说ValidateUser返回false,但Membership.GetUser为null(您通常不应该到达这一点)。表“aspnet_成员资格”中有一个字段“IsApproved”。一旦这是真的,那么一切都很好。默认情况下为false。
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.
{
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);
}
}