一个基于asp和C#的网站,已经上线,为什么小弟我手工向数据库中users的表格中增加用户,登录网站还是不认这个是管理员账号
一个基于asp和C#的网站,已经上线,为什么我手工向数据库中users的表格中增加用户,登录网站还是不认这个是管理员账号?
先前发过一贴,http://bbs.csdn.net/topics/390672696,最后没有解决。不过期间,我做过一些摸索,但没有成功。索性我就把所有信息都重新发一下,看一下这里的大神有没有发现什么。
环境: ASP.NET + MS SQL server
基本问题:现在客户需要增加两个管理员账户,我也在数据库的user的表格中根据以前管理员账户的格式信息手工添加了两个账户信息。但从网站登录后,登录页面转向一个非常简单的页面(这个页面是guest用户的登录页面),而不是转向管理员的页面?总之,网站似乎不认识这个账户,为什么呢?
考虑到上周我做了很多尝试,把代码弄的有点混乱。我今天用原先代码覆盖了我修改的代码,再进行测试
我的发现:
首先我在本地电脑上(非网站服务器上)启动该系统,设置断点,输入原先管理员账号(原先就有的),按F10一步一步测试,用户名和密码检验函数是:
其中,这句e.Authenticated = UserManager.Authenticate(Login1.UserName, Login1.Password, out isAdmin);对管理员账号和我加入的账号返回不同的值,我进一步搜索UserManager.Authenticate,下面是这个函数代码:
上面函数代码没有贴完整。不过我测试时,发现原先正常的管理员账号在执行v.Count()时,是执行isAdmin = v.First<DataLayer.User>().IsAdmin;return true; 这说明v.Count()>0。
但我用我手工加入的管理员账号和密码测试时,当执行v.Count()时就直接跳过去,不像上面这样执行里面的语句。
所以我想,肯定var v = from s in enity.Users where s.UserID == userID && s.Password == password select s;出现了问题。
我把光标放在Users上按F12,出现了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;
return true;
}
else
{
isAdmin = false;
return false;
}
}
上面函数代码没有贴完整。不过我测试时,发现原先正常的管理员账号在执行v.Count()时,是执行isAdmin = v.First<DataLayer.User>().IsAdmin;return true; 这说明v.Count()>0。
但我用我手工加入的管理员账号和密码测试时,当执行v.Count()时就直接跳过去,不像上面这样执行里面的语句。
所以我想,肯定var v = from s in enity.Users where s.UserID == userID && s.Password == password select s;出现了问题。
我把光标放在Users上按F12,出现了Users的相关定义,
public ObjectSet<User> Users
{
get
{
if ((_Users == null))
{
_Users = base.CreateObjectSet<User>("Users");
}
return _Users;