简体   繁体   English

asp.net成员资格api-登录控件(代码在哪里执行?)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM