一个基于asp和C#的网站,已经上线,为什么我手工向数据库中users的表格中增加用户,登录网站还是不认这个是管理员账号?

歪着看世界 2013-12-23 06:21:15
先前发过一贴,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;
}
}


现在应该是程序在向数据库查询时出线了问题。我在上周五测试时,还发现我输入的管理员账号执行到v.Count()时是>0的,但执行 isAdmin = v.First<DataLayer.User>().IsAdmin;时返回了false.

我不可能把代码全部贴过来,太多了。现在就想请教大神们,到底出现了什么问题呢?该如何检测和修改呢?
...全文
321 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dotar 2014-02-07
  • 打赏
  • 举报
回复
你手动填的时候 肯定有个条件没填好
qxyywy 2014-02-07
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390521661
qxyywy 2014-02-07
  • 打赏
  • 举报
回复
你说的情况我之前也遇到过,也查询了一些资料,因为对entity不熟悉没能实际解决问题 最终因为我们是多个项目操作同一数据库 放弃了entity 走会原来的SQL
qxyywy 2014-02-07
  • 打赏
  • 举报
回复
enity 之前也因为这个被害惨了 你的项目是一个还是有多个项目操作统一数据库? 你在取数据的时候 调用一次刷新 ObjectContext.Refresh(RefreshMode.StoreWins,ObjectSet)
Xy_918 2014-02-07
  • 打赏
  • 举报
回复
同意ls做法,估计程序压根就没调你改的的数据库或表。
  • 打赏
  • 举报
回复
你可以先把你动了的那个数据库表改名字,然后再测试一下,看看是不是在你预期的代码抛出异常。
无聊找乐 2014-02-02
  • 打赏
  • 举报
回复
只在User表中添加了数据? 一般来说除了User表应该还有个用户角色(user_role)表,用来指定用户的角色
歪着看世界 2013-12-23
  • 打赏
  • 举报
回复
已经单步调试了,请注意我已经列出单步调试后的结果和猜测了。
引用 1 楼 ejason 的回复:
单步调试下吧。看每个步骤都返回了什么,然后再分析原因。。。
铁歌 2013-12-23
  • 打赏
  • 举报
回复
单步调试下吧。看每个步骤都返回了什么,然后再分析原因。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧