日期:2014-05-17  浏览次数:20403 次

一个基于asp和C#的网站,已经上线,为什么我手工向数据库中users的表格中增加用户,登录网站还是不认这个是管理员账号?
先前发过一贴,http://bbs.csdn.net/topics/390672696,最后没有解决。不过期间,我做过一些摸索,但没有成功。索性我就把所有信息都重新发一下,看一下这里的大神有没有发现什么。

环境: ASP.NET + MS SQL server
基本问题:现在客户需要增加两个管理员账户,我也在数据库的user的表格中根据以前管理员账户的格式信息手工添加了两个账户信息。但从网站登录后,登录页面转向一个非常简单的页面(这个页面是guest用户的登录页面),而不是转向管理员的页面?总之,网站似乎不认识这个账户,为什么呢?

考虑到上周我做了很多尝试,把代码弄的有点混乱。我今天用原先代码覆盖了我修改的代码,再进行测试

我的发现:
首先我在本地电脑上(非网站服务器上)启动该系统,设置断点,输入原先管理员账号(原先就有的),按F10一步一步测试,用户名和密码检验函数是:
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        bool isAdmin = false;

        e.Authenticated = UserManager.Authenticate(Login1.UserName, Login1.Password, out isAdmin);

        bool result = LicenseManager.checkExpire();

        if (!result)
        {
            e.Authenticated = false;
        
        }
      
        if (e.Authenticated)
        {
            if (!isAdmin)
            {
                UserManager.ReportLogin(Login1.UserName, DateTime.Now);
            }

        }


        if (isAdmin)
        {
            Login1.DestinationPageUrl = "~/Admin/Default.aspx";

        }

    }
}

其中,这句e.Authenticated = UserManager.Authenticate(Login1.UserName, Login1.Password, out isAdmin);对管理员账号和我加入的账号返回不同的值,我进一步搜索UserManager.Authenticate,下面是这个函数代码:
 public class UserManager
    {
        public static bool Authenticate(string userID, string password, out bool isAdmin)
        {

            MOREntities enity = new MOREntities();

            var v = from s in enity.Users where s.UserID == userID && s.Password == password select s;


            if (v.Count() > 0)
            {
                

                isAdmin = v.First<DataLayer.User>().IsAdmin;