[英]asp.net membership api - login control (where is the code executing?)
here is the login page that created for you when you create a default application in asp.net and i am trying to understand where does the actually code validating/authenticating the userid and password?, i did not find any code-behind code except this: where does it validating the username and password? 这是当您在asp.net中创建默认应用程序时为您创建的登录页面,我试图了解实际代码在哪里验证/验证用户名和密码?,除此以外,我没有找到任何代码隐藏代码:在哪里验证用户名和密码?
i see the CommandName="Login"
but dont find the code.... 我看到
CommandName="Login"
但是找不到代码。...
protected void Page_Load(object sender, EventArgs e)
{
RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
}
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Log In
</h2>
<p>
Please enter your username and password.
<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink> if you don't have an account.
</p>
<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
<fieldset class="login">
<legend>Account Information</legend>
<p>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:CheckBox ID="RememberMe" runat="server"/>
<asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
</p>
</fieldset>
<p class="submitButton">
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
</p>
</div>
</LayoutTemplate>
</asp:Login>
</asp:Content>
The implement is in the Login.OnBubbleEvent
method. 该工具位于
Login.OnBubbleEvent
方法中。 For more information, refer to http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.login.onbubbleevent.aspx 有关更多信息,请参考http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.login.onbubbleevent.aspx
Login.OnBubbleEvent as Edward Zhu pointed out is the correct answer. 正如Edward Edward所指出的,Login.OnBubbleEvent是正确的答案。 To further the understanding what happens here is the code snippet from System.Web.dll for the event (using Reflector.exe)
为了进一步了解这里发生的情况,是该事件的System.Web.dll代码片段(使用Reflector.exe)
protected override bool OnBubbleEvent(object source, EventArgs e)
{
bool flag = false;
if (e is CommandEventArgs)
{
CommandEventArgs args = (CommandEventArgs) e;
if (string.Equals(args.CommandName, LoginButtonCommandName, StringComparison.OrdinalIgnoreCase))
{
this.AttemptLogin();
flag = true;
}
}
return flag;
}
LoginButtonCommandName defaults to "Login" LoginButtonCommandName默认为“登录”
Pawel 帕维尔
Search in your code for a class that inherits : MembershipProvider 在您的代码中搜索继承的类:MembershipProvider
I have this class 我有这堂课
public class TsMembershiProvider : MembershipProvider
{
private Dictionary<string, MembershipUser> _Users;
// MembershipProvider Properties
public override string ApplicationName
{
get { throw new NotSupportedException(); }
set { throw new NotSupportedException(); }
}
public override bool EnablePasswordRetrieval
{
get { return true; }
}
public override bool EnablePasswordReset
{
get { return true; }
}
public override int MaxInvalidPasswordAttempts
{
get { throw new NotSupportedException(); }
}
public override int MinRequiredNonAlphanumericCharacters
{
get { return 2; }
}
public override int MinRequiredPasswordLength
{
get { return 5; }
}
public override int PasswordAttemptWindow
{
get { throw new NotSupportedException(); }
}
public override MembershipPasswordFormat PasswordFormat
{
get { throw new NotSupportedException(); }
}
public override string PasswordStrengthRegularExpression
{
get { throw new NotSupportedException(); }
}
public override bool RequiresQuestionAndAnswer
{
get { return false; }
}
public override bool RequiresUniqueEmail
{
get { throw new NotSupportedException(); }
}
// MembershipProvider Methods
public override void Initialize(string name, NameValueCollection config)
{
// Verify that config isn't null
if (config == null)
throw new ArgumentNullException("config");
// Assign the provider a default name if it doesn't have one
if (String.IsNullOrEmpty(name))
name = "TsMembershipProvider";
// Add a default "description" attribute to config if the
// attribute doesn't exist or is empty
if (string.IsNullOrEmpty(config["description"]))
{
config.Add("description", "Membership provider");
}
// Call the base class's Initialize method
base.Initialize(name, config);
// Throw an exception if unrecognized attributes remain
if (config.Count > 0)
{
string attr = config.GetKey(0);
if (!String.IsNullOrEmpty(attr))
throw new ProviderException
("Unrecognized attribute: " + attr);
}
}
public override bool ValidateUser(string username, string password)
{
if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password))
return false;
SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnString, "spc_UserAuthorization", username, password);
bool ret = dr.HasRows;
return ret;
}
public override MembershipUser GetUser(string username, bool userIsOnline)
{
// Note: This implementation ignores userIsOnline
// Validate input parameters
if (String.IsNullOrEmpty(username))
return null;
// Retrieve the user from the database
MembershipUser user = MU(username, userIsOnline); //userIsOnline = AltEmail - gets alternative email (hvb)
return user;
}
public override MembershipUserCollection GetAllUsers(int pageIndex,
int pageSize, out int totalRecords)
{
// Note: This implementation ignores pageIndex and pageSize,
// and it doesn't sort the MembershipUser objects returned
// Make sure the data source has been loaded
ReadMembershipDataStore();
MembershipUserCollection users =
new MembershipUserCollection();
foreach (KeyValuePair<string, MembershipUser> pair in _Users)
users.Add(pair.Value);
totalRecords = users.Count;
return users;
}
public override int GetNumberOfUsersOnline()
{
throw new NotSupportedException();
}
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
MembershipUser u = Membership.GetUser(username);
if (u == null || oldPassword != u.GetPassword())
{
return false;
}
if (newPassword.Length < MinRequiredPasswordLength)
{
return false;
}
CharEnumerator chars = newPassword.GetEnumerator();
int nr = 0;
while (chars.MoveNext())
{
if (!Char.IsLetterOrDigit(chars.Current))
nr++;
}
if (MinRequiredNonAlphanumericCharacters < nr)
{
return false;
}
// CALL TO SQL TO CHANGE PASSWORD
return true;
}
public override bool
ChangePasswordQuestionAndAnswer(string username,
string password, string newPasswordQuestion,
string newPasswordAnswer)
{
throw new NotSupportedException();
}
public override MembershipUser CreateUser(string username,
string password, string email, string passwordQuestion,
string passwordAnswer, bool isApproved, object providerUserKey,
out MembershipCreateStatus status)
{
//SOME CODE i DON'T WHANT YOU TO SEE :)
string strStatus = "";
string strUserid = "";
status = (MembershipCreateStatus)Enum.Parse(typeof(MembershipCreateStatus), strStatus, true);
if (status == MembershipCreateStatus.Success)
{
int userid = 0;
try
{
userid = Convert.ToInt32(strUserid);
}
catch
{
status = MembershipCreateStatus.ProviderError;
}
MembershipUser mu = MU(username);
return mu;
}
else
{
return null;
}
}
public override bool DeleteUser(string username,
bool deleteAllRelatedData)
{
throw new NotSupportedException();
}
public override MembershipUserCollection
FindUsersByEmail(string emailToMatch, int pageIndex,
int pageSize, out int totalRecords)
{
throw new NotSupportedException();
}
public override MembershipUserCollection
FindUsersByName(string usernameToMatch, int pageIndex,
int pageSize, out int totalRecords)
{
throw new NotSupportedException();
}
public override string GetPassword(string username, string answer)
{
//GET PASS FROM SQL
return "";
}
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
string UserName = (string)SqlHelper.ExecuteScalar(SqlHelper.ConnString, CommandType.Text, "select .... WHERE UserID = " + providerUserKey.ToString());
MembershipUser m = MU(UserName, userIsOnline);
return m;
}
public override string ResetPassword(string username,
string answer)
{
throw new NotSupportedException();
}
public override bool UnlockUser(string userName)
{
throw new NotSupportedException();
}
public override void UpdateUser(MembershipUser user)
{
throw new NotSupportedException();
}
// Helper method
private void ReadMembershipDataStore()
{
lock (this)
{
}
}
private MembershipUser MU(string UserName)
{
return MU(UserName, false);
}
private MembershipUser MU(string UserName, bool isOnline)
{
MembershipUser user = null;
//SOME CODE
return user;
}
}
Have you looked in the code behind file? 您是否查看了文件后面的代码? This would be like login.aspx.cs.
这就像login.aspx.cs。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.