Api Login .NET MVC lấy dữ liệu user đăng nhập

Chào các bác, em đang làm api đăng nhập cho reactjs, để sau khi đăng nhập sẽ lấy được thông tin người dùng ạ, code em bên dưới ,bác nào giúp em với ạ. Em cám ơn!

public Response employeeLogin(NguoiDung lg)
        {
            if (ModelState.IsValid)
            {
                var f_password = GetMD5(lg.Password);
                var data = db.SYS_Nguoidung.Where(s => s.Username.Equals(lg.Username) && s.Password.Equals(f_password)).ToList();
                if (data.Count() > 0)
                {
                    // Em muốn trả dữ liệu người dùng vừa mới đăng nhập ở đây để bên ReactJs get dữ liệu
                    return new Response { Status = "Success", Message = "Login Success"};
                }
            }
            else
            {
                return new Response { Status = "Fail", Message = "Login Fail" };
            }
            return new Response { Status = "Sai", Message = "Sai" };
        }

return thẳng biến data về luôn, nó tự format thành JSON

Bước 1: Lấy thông tin user:
Em phải chắc chắn người dùng là duy nhất, nghĩa là data có nhiều nhất 1 element.

lúc này

var user = data[0];

hoặc đơn giản hơn dùng FirstOrDefault () thay cho ToList()

var user = db.SYS_Nguoidung.Where(s => condition).FirstOrDefault();
if(user != null)
{
}

Bước 2: Trả về Response.
Do không biết cấu trúc class Response của em như thế nào, nên anh gợi ý kế thừa nó

class UserResponse: Response {
    public User User {get;set;}
}

và trả về

if(user != null)
{
   return new UserResponse() {Status = "Success", Meassage = "Login Success", User = user};
}

Góp ý thêm:
Chắc em mới học C# nên code vi phạm nghiêm trọng:

  • Coding Convention:
    • Tên method viết dạng Pascal,
    • tên biến local viết dạng camel case không có gạch dưới và không có tiền tố.
  • Không dùng Asynchronous
    • Trong ASP.Net đối với các method tốn thời gian thực hiện thì nên dùng async method để tránh việc block
3 Likes

Dạ em cám ơn anh ạ, em chưa biết các nguyên tắc cơ bản trong C# nên còn vi phạm ạ, em sẽ học hỏi thêm ạ.

Anh giải thích chỗ này giúp em với. Ví dụ truy vấn database chờ lâu thì thêm await với async phải không a?

Chào anh,
Em làm như cách anh chỉ , nhưng mà em đang gặp vấn đề là em muốn select dữ liệu từ bên table khác qua thì nó lại bị như thế này ạ.

em fix được code rồi ạ , em cám ơn mọi người ạ.

public UserResponse employeeLogin(NguoiDung lg)
        {
            var f_password = GetMD5(lg.Password);
            var res = (from p in db.SYS_Nguoidung.Where(s => s.Username.Equals(lg.Username) && s.Password.Equals(f_password))
                       from nd in db.SYS_Nguoidung
                       from nv in db.PB_Nhanvien
                       from quyen in db.SYS_Quyen
                       where nv.MaNV == nd.MaNV
                       where quyen.IDQuyen == nd.IDQuyen
                       select new
                       {
                           nd.ID,
                           nv.MaNV,
                           nd.Fullname,
                           quyen.Rollname,
                           nd.Username,
                           nd.Password,
                           nd.Email,
                           nd.CreatedByUser,
                           nd.CreatedByDate
                       }).FirstOrDefault();
            if (res != null)
            {
                return new UserResponse() { Status = "Success", Message = "Login Success", SYS_Nguoidung = res };
            }
            return new UserResponse { Status = "Sai", Message = "Sai" };
        }
```
đây là code của em ạ.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?