【问题标题】:Entity framework step issues实体框架步骤问题
【发布时间】:2015-02-24 17:44:20
【问题描述】:

我正在尝试找出其他人的代码.... 这样做是从用户那里获取用户名和密码,并从数据库表中检查用户名和密码是否正确...... 他的 DataLayer 看起来像这样:

public class UserRepository : IUser
    {
        Context con = new Context();
        public UserDTO GetUser(string user)
        {
            User u = con.Users.Find(user);
            UserDTO User = new UserDTO();
            if (u != null)
            {
                User.Username = u.UserName;
                User.Password = u.Password;            
            }
            return User;
        }
    }

用户界面:

    public interface IUser
        {
            UserDTO GetUser(string user);
        }

ServiceLayer 如下所示:

public class UserService : IUserService
    {
        IUser data;

        public UserService(IUser data)
        {
            this.data = data;
        }

        public bool Authenticate(string user,string pwd)
        {
            UserDTO u = data.GetUser(user);
            if (u.Username == user && u.Password == pwd)
                return true;
            else
                return false;
        }
    }

IuserService 接口:

 public interface IUserService
    {
        bool Authenticate(string user, string pwd);
    }

而 MVC 控制器看起来像这样:

     public class HomeController : Controller
    {                          
        public ActionResult Log()
        {    
            return View();
        }          

        IUserService ser;
        public HomeController()
        {
            ser = new UserService(new UserRepository());
        }
        public ActionResult Login(Models.User user)
        {
            if (ser.Authenticate(user.UserName, user.Password))
            {
                ViewBag.Message = "Success";
            }
            else
                ViewBag.Message = "UnSuccess";

            return View();
        }

我无法真正理解他在这个 Controller Constructor (ser = new UserService(new UserRepository())) 中做了什么,但代码运行良好...... 他想做什么,他是想将此控制器连接到 DataLayer(UserRepository 类)吗?

谢谢!!!

【问题讨论】:

    标签: asp.net-mvc entity-framework entity-framework-5


    【解决方案1】:

    家庭控制器有一个登录操作方法,它接受一个用户模型,它有一个用户名和密码。

    public ActionResult Login(Models.User user)
    

    action 方法使用用户服务来尝试验证用户的密码。 控制器调用 UserService 的 Authenticate 方法,该方法接受提供的用户名和密码。

    if (ser.Authenticate(user.UserName, user.Password))
    

    服务调用 UserRepositories GetUser 方法,该方法尝试通过用户名查找用户。

    public bool Authenticate(string user,string pwd)
    {
        UserDTO u = data.GetUser(user);
    

    ...

    User u = con.Users.Find(user);
    

    如果它在数据库中通过该用户名找到用户,它会检查返回带有用户名和密码的用户对象。

            if (u != null)
            {
                User.Username = u.UserName;
                User.Password = u.Password;            
            }
            return User;
    

    authenticate 方法的其余部分检查此 UserDTO 的密码是否与提供给 Login Action 方法的初始密码匹配,并根据该密码返回 true 或 false。

            if (u.Username == user && u.Password == pwd)
                return true;
            else
                return false;
    

    【讨论】:

    • 是的.. 你能解释一下为什么他把这段代码放在他的构造函数中:...ser = new UserService(new UserRepository());
    • 他是否试图将此控制器连接到 DataLayer(UserRepository 类)?
    • @Dayan - 他们想在实例化控制器时创建一个 UserService 对象。这是一种连接到数据层的方式,是的。 UserRepository 只对用户执行 CRUD 操作,但 UserService 负责业务逻辑或其他事情,例如身份验证。我不确定为什么控制器将 UserRepo 传递给 UserService 的构造函数。
    • 值得一提的是,在查找匹配用户之前没有对密码进行哈希处理。这意味着您继承了具有未加密密码的数据库,这对安全性非常不利。我建议更新代码以检查散列密码并散列数据库中已有的密码。见codeproject.com/Articles/704865/…
    • 另外,对我来说,将 UserRepo 传入 UserService 听起来像是构造函数注入。这里有依赖注入的概述codeproject.com/Articles/254091/…
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2011-11-16
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多