• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

一个基于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.

我不可能把代码全部贴过来,太多了。现在就想请教大神们,到底出现了什么问题呢?该如何检测和修改呢?
...全文
262 点赞 收藏 9
写回复
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)
回复 点赞
nxy_918 2014年02月07日
同意ls做法,估计程序压根就没调你改的的数据库或表。
回复 点赞
以专业开发人员为伍 2014年02月02日
你可以先把你动了的那个数据库表改名字,然后再测试一下,看看是不是在你预期的代码抛出异常。
回复 点赞
无聊找乐 2014年02月02日
只在User表中添加了数据? 一般来说除了User表应该还有个用户角色(user_role)表,用来指定用户的角色
回复 点赞
歪着看世界 2013年12月23日
已经单步调试了,请注意我已经列出单步调试后的结果和猜测了。
引用 1 楼 ejason 的回复:
单步调试下吧。看每个步骤都返回了什么,然后再分析原因。。。
回复 点赞
铁歌 2013年12月23日
单步调试下吧。看每个步骤都返回了什么,然后再分析原因。。。
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告