none
Login控件的Authenticate事件自定义验证(用简码和密码做登陆),登陆后发现用户名也成了简码,急!!! RRS feed

  • 问题

  • Login控件的Authenticate事件允许我们自定义验证逻辑,我想实现login控件输入用户简码和密码,(用户简码在自定义的一张aspnet_info表中,该表也有一字段userid与aspnet_user对应一对一关系)

    实现一个简单的方法定义如下:
    public class MemberHelp
        {
            public static bool ValidateUser(string userSimpleCode, string password)
            {
                bool IsAuthenticated = false;
                CJArchivesDataContext objDataContext = new CJArchivesDataContext();
                //aspnet_Infos表中是否有指定的简码存在(简码是唯一的)
                if (objDataContext.aspnet_Infos.Count(info => info.SimpleCode == userSimpleCode) > 0)
                {
                    string userName = objDataContext.aspnet_Infos.First(info => info.SimpleCode == userSimpleCode).aspnet_User.UserName;//存在,根据简码查出对应的用户名
                    if (!string.IsNullOrEmpty(userName))
                    {
                        //找到用户后,调用Membership.ValidateUser的方法来验证
                        if (Membership.ValidateUser(userName, password))
                            IsAuthenticated = true;
                    }
                }
                return IsAuthenticated;
            }
        }

    login控件的Authenticate事件调用上述方法

    protected void myLogin_Authenticate(object sender, AuthenticateEventArgs e)
            {
               
                string userSimpleCode = myLogin.UserName;
                string strPassword = myLogin.Password;
                if (MemberHelp.ValidateUser(userSimpleCode, strPassword))
                {
                    e.Authenticated = true;
                }
                else
                {
                    e.Authenticated = false;
                }
            }

    能正常验证,但我在default.aspx里显示一下用户名,

    protected void Page_Load(object sender, EventArgs e)
            {
                if(!Page.IsPostBack)
                {
                    string userName = User.Identity.Name;
               
                    Label1.Text = string.Format("用户名:{0}", userName);
                }
            }
    显示却是用户对应的简码,请指点一下!!
    2009年6月11日 7:23

答案

  • 你好,User.Identity.Name 与 myLogin.UserName 的值是一样的。你登录的时候使用什么名称登录,这个值就是什么了。真实姓名从本质上来说就等于是另外一个字段了。你可以在验证前通过简码把真实姓名读取出来,或者验证后通过简码把真实姓名现实出来。可以使用数据库字段存取真实姓名,或者使用Profile存储!
    邹俊才
    2009年6月11日 13:54
    版主

全部回复

  • 你好,楼主,看了半天没太明白!
    邹俊才
    2009年6月11日 10:52
    版主
  • 我想在Login控件的Authenticate事件执行自己的验证逻辑,即验证用户输入的用户简码(比如用户为张三,简码为zs)和密码来登录.简码在另一自定的张表中aspnet_info,并且是唯一的,该表通过uid和aspnet_user表一对一关连.

    MemberHelp.ValidateUser 是我定义的一个验证方法,

    login控件的Authenticate事件调用上述方法

    protected void myLogin_Authenticate(object sender, AuthenticateEventArgs e)
            {
               
                string userSimpleCode = myLogin.UserName;
                string strPassword = myLogin.Password;
                if (MemberHelp.ValidateUser(userSimpleCode, strPassword))
                {
                    e.Authenticated = true;
                }
                else
                {
                    e.Authenticated = false;
                }
            }

    当用default.aspx页面显示用户名时,显示的是简码,而不是用户名!
    2009年6月11日 13:12
  • 你好,User.Identity.Name 与 myLogin.UserName 的值是一样的。你登录的时候使用什么名称登录,这个值就是什么了。真实姓名从本质上来说就等于是另外一个字段了。你可以在验证前通过简码把真实姓名读取出来,或者验证后通过简码把真实姓名现实出来。可以使用数据库字段存取真实姓名,或者使用Profile存储!
    邹俊才
    2009年6月11日 13:54
    版主