public void TheoDoiTruyen(AddBookMark data) { ResponseInfo response = new ResponseInfo(); try { string token = HttpContext.Current.Request.Cookies["ToKen"].Value.Replace("%3d", "="); string Token = BaoMat.Base64Decode(token); TblToken TblToken = context.Tokens.FirstOrDefault(x => x.TokenTaiKhoan == Token); int ID_TaiKhoan = TblToken.Id_TaiKhoan; TblTheoDoiTruyen tblTheoDoiTruyen = context.TheoDoiTruyens.FirstOrDefault(x => x.Id_NguoiDoc == ID_TaiKhoan && x.Id_Truyen == data.id_Truyen); if (tblTheoDoiTruyen == null) { context.TheoDoiTruyens.Add(new TblTheoDoiTruyen { Id_NguoiDoc = ID_TaiKhoan, Id_Truyen = data.id_Truyen }); context.SaveChanges(); } } catch (Exception e) { throw e; } }
//Lấy lại mật khẩu public ResponseInfo ForgotPassword(SendEMail email) { ResponseInfo result = new ResponseInfo(); try { var taikhoan = context.TaiKhoans.FirstOrDefault(x => x.Email == email.email && !x.DelFlag); string Username = taikhoan.Username; string token = Common.Common.GetToken(taikhoan.Id); TblTokenResset tokenLG = new TblTokenResset { Id_TaiKhoan = taikhoan.Id, TokenReset = token, ThoiGianHetHan = DateTime.Now.AddHours(12) }; context.ResetPassWords.Add(tokenLG); context.SaveChanges(); token = BaoMat.Base64Encode(token); string Subject = "Password Reset Confirmation for " + Username; string body = "<p>There was recently a request to change the password for your account. </p>" + "<p>If you requested this password change, please reset your password here: </p>" + "<p> https://truyenda.tk/forgot?token=" + token + "</p>" + "<p>If you did not make this request, you can ignore this message and your password will remain the same.</p>"; SendMail.SendGird(email.email, body, Subject); var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.GuiEmailThanhCong); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Xác thực tài khoản thông qua việc login bằng các tài khoản FB hoặc GG. /// Author : QuyPN - 30/05/2018 - create /// </summary> /// <param name="accessToken">Thông tin cá nhân lấy được từ FB hoặc GG</param> /// <param name="type">type = 1: thông tin từ FB; type = 2: thông tin từ GG</param> /// <returns>Chỗi Json chứa kết quả kiểm tra</returns> /// <remarks> /// Method: GET /// RouterName: homeCheckSocialLogin /// </remarks> public JsonResult LoginBySocialAccount(string accessToken, int type = (int)OtherEnum.TaiKhoanFB) { ResponseInfo response = new ResponseInfo(); try { LoginModel model = new LoginModel(); TblTokenLogin token = model.CheckSocialAccount(type == (int)OtherEnum.TaiKhoanFB ? model.LayThongTinFB(accessToken) : model.LayThongTinGG(accessToken), type); if (token != null) { response.ThongTinBoSung1 = BaoMat.Base64Encode(token.Token); } else { response.Code = (int)CodeResponse.NotAccess; response.MsgNo = (int)MsgNO.XacThucKhongHopLe; } } catch (Exception e) { response.Code = (int)CodeResponse.ServerError; response.MsgNo = (int)MsgNO.ServerError; response.ThongTinBoSung1 = e.Message; } return(Json(response, JsonRequestBehavior.AllowGet)); }
/// <summary> /// Sinh lại token và gửi lại Email theo email của người dùng nhập vàot. /// Author : QuyPN - 20/05/2018 - create /// </summary> /// <param name="Email">Email đã đăng ký do người dùng nhập vào</param> /// <returns>Thông tin về việc gửi mail</returns> public ResponseInfo SendEmail(string Email) { DbContextTransaction transaction = context.Database.BeginTransaction(); try { ResponseInfo result = new ResponseInfo(); TblAccount account = context.Account.FirstOrDefault(x => x.Email == Email && !x.DelFlag); if (account == null) { result.Code = 202; result.MsgNo = (int)MsgNO.EmailKhongTonTai; } else { TblCauHinh cauHinh = Common.LayCauHinh(); account.TokenActive = Common.GetToken(account.Id); account.TimeOfToken = DateTime.Now.AddHours(cauHinh.ThoiGianTonTaiToken); context.SaveChanges(); SendEmail(account); result.MsgNo = (int)MsgNO.DaGuiMailKichHoat; result.ThongTinBoSung1 = BaoMat.Base64Encode(account.TokenActive); } transaction.Commit(); return(result); } catch (Exception e) { transaction.Rollback(); throw e; } }
/// <summary> /// Lấy thông tin tài khoản đang đăng nhập /// Author : HoangNM - 29/03/2019 - create /// </summary> /// <param name="token"> /// token của account đăng nhập. /// </param> /// <returns> /// Thông tin tài khoản /// </returns> public GetAccount GetAccount(string token) { string Token = BaoMat.Base64Decode(token); TblToken TblToken = context.Tokens.FirstOrDefault(x => x.TokenTaiKhoan == Token); GetAccount getAccount = context.TaiKhoans.Where(x => x.Id == TblToken.Id_TaiKhoan && !x.DelFlag).Select(x => new GetAccount { Email = x.Email, GioiTinh = x.ThongTinNguoiDung.GioiTinh, Id_Face = x.Id_Face, Id_google = x.Id_Google, Id_TrangThai = x.Id_TrangThai, TenTrangThai = x.TrangThaiTaiKhoan.TenTrangThai, Id_NhomDich = x.Id_NhomDich, TenNhom = x.NhomDich.TenNhomDich, Username = x.Username, Ten = x.ThongTinNguoiDung.Ten, NgaySinh = x.ThongTinNguoiDung.NgaySinh, NgayHetHan = TblToken.ThoiGianHetHan, Token = token }).FirstOrDefault(); long TongQuyen = (long)context.TaiKhoans.Where(x => x.Id == TblToken.Id_TaiKhoan && !x.DelFlag).FirstOrDefault().PhanQuyen.TongQuyen; getAccount.Permissions = context.Quyens.Where(x => !x.DelFlag && ((long)x.BitQuyen & TongQuyen) != 0).Select(x => new AllPermission { TenQuyen = x.TenQuyen, Id_Quyen = x.Id }).ToList(); return(getAccount); }
/// <summary> /// Xóa token login của user khi user logout /// Author : QuyPN - 28/05/2018 - create /// </summary> /// <returns>true nếu xóa thành công</returns> public bool RemoveToken(string token) { try { token = BaoMat.Base64Decode(token); context.TokenLogin.Where(x => x.Token == token).Delete(); context.TokenLogin.Where(x => x.ThoiGianTonTai < DateTime.Now).Delete(); return(true); } catch (Exception e) { throw e; } }
/// <summary> /// Kích hoạt tài khoản và đưa về trang view thông báo. /// Author : QuyPN - 20/05/2018 - create /// </summary> /// <param name="token">Token đang mã hóa Base64 được gửi đi trong mail</param> /// <param name="username">Tên đăng nhập mà user đăng ký được gửi kèm trong mail</param> /// <returns>Trả về trang thông báo kích hoạt tài khoản thành công hoặc trang lỗi</returns> /// <remarks> /// Method: GET /// RouterName: KichHoatTaiKhoan /// </remarks> public ActionResult AciveAccount(string token, string username) { try { string tokenCookies = Common.GetCookie("tokenAccount"); if (tokenCookies == "" || tokenCookies != BaoMat.Base64Decode(token)) { return(RedirectToAction("Index", "Home")); } ResponseInfo response = new RegisterModel().ActiveAccount(token, username); return(View("ActiveAccount", response)); } catch (Exception e) { return(RedirectToAction("Error", "Error", new { area = "error", error = e.Message })); } }
//Lấy lại mật khẩu public ResponseInfo ChangePassword(ChangePass data) { ResponseInfo result = new ResponseInfo(); try { string Token = BaoMat.Base64Decode(data.tokenReset); TblTokenResset resetPassWord = context.ResetPassWords.FirstOrDefault(x => x.TokenReset == Token && !x.DelFlag); if (resetPassWord == null) { result.Code = 400; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.ThayDoiMatKhauThatBai); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } else if (resetPassWord.ThoiGianHetHan < DateTime.Now) { result.Code = 400; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.TokenResetHetHan); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } else { string Hash_Pass = BaoMat.GetMD5(BaoMat.GetSimpleMD5(data.NewPass), context.TaiKhoans.Where(x => x.Id == resetPassWord.Id_TaiKhoan && !x.DelFlag).FirstOrDefault().salt_Pass); //cập nhật mật khẩu context.TaiKhoans.Where(x => x.Id == resetPassWord.Id_TaiKhoan && !x.DelFlag).Update(y => new TblTaiKhoan { hash_Pass = Hash_Pass }); context.ResetPassWords.Where(x => x.TokenReset == Token).Delete(); context.ResetPassWords.Where(x => x.ThoiGianHetHan < DateTime.Now).Delete(); context.SaveChanges(); var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.ThayDoiMatKhauThanhCong); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; return(result); } return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Update thông tin cá nhân /// Author : HoangNM - 29/03/2019 - create /// </summary> /// <param name="account"> /// thông tin mà người dùng muốn thay đổi /// </param> /// <returns> /// Thông báo /// </returns> public ResponseInfo UpdateAccount(UpdateAccount account) { DbContextTransaction transaction = context.Database.BeginTransaction(); ResponseInfo response = new ResponseInfo(); try { string token = HttpContext.Current.Request.Cookies["ToKen"].Value.Replace("%3d", "="); token = BaoMat.Base64Decode(token); TblToken TblToken = context.Tokens.FirstOrDefault(x => x.TokenTaiKhoan == token); if (account.New_Passord != "" && string.Compare(account.New_Passord, account.Confirm_Password) == 0) { string Hash_Pass = BaoMat.GetMD5(BaoMat.GetSimpleMD5(account.New_Passord), context.TaiKhoans.Where(x => x.Id == TblToken.TaiKhoan.Id && !x.DelFlag).FirstOrDefault().salt_Pass); //cập nhật mật khẩu context.TaiKhoans.Where(x => x.Id == TblToken.TaiKhoan.Id && !x.DelFlag).Update(y => new TblTaiKhoan { hash_Pass = Hash_Pass }); } context.ThongTinNguoiDungs.Where(x => x.Id == TblToken.TaiKhoan.ThongTinNguoiDung.Id && !x.DelFlag).Update(x => new TblUser { Ten = account.Ten, NgaySinh = account.NgaySinh, GioiTinh = account.GioiTinh }); context.SaveChanges(); response.IsSuccess = true; transaction.Commit(); var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.CapNhatThongTinThanhCong); response.TypeMsgError = errorMsg.Type; response.MsgError = errorMsg.Msg; } catch (Exception e) { response.IsSuccess = false; transaction.Rollback(); throw e; } return(response); }
/// <summary> /// Hàm gửi mail kích hoạt tài khoản theo email đã đăng ký /// Author : QuyPN - 20/05/2018 - create /// </summary> /// <param name="account">Tài khoản ddowwcj lưu trong DB</param> public void SendEmail(TblAccount account) { try { string lang = Common.GetLang(); TblBieuMau bieuMau = context.BieuMau.FirstOrDefault(x => x.Id == (int)TemplateEnum.ActiveAccount && x.Lang == lang && !x.DelFlag); if (bieuMau != null) { bieuMau.NoiDung = bieuMau.NoiDung.Replace("#linkActive", Common.domain + @"kich-hoat-tai-khoan?token=" + BaoMat.Base64Encode(account.TokenActive) + "&&username=" + account.Username); EmailService.Send(account.Email, bieuMau.TenBieuMau, bieuMau.NoiDung); } } catch (Exception e) { throw e; } }
/// <summary> /// Xóa token login của user khi user logout /// Author : HoangNM - 03/03/2019 - create /// </summary> /// <returns>true nếu xóa thành công</returns> public ResponseInfo RemoveToken(string token) { ResponseInfo result = new ResponseInfo(); try { token = BaoMat.Base64Decode(token); context.Tokens.Where(x => x.TokenTaiKhoan == token).Delete(); context.Tokens.Where(x => x.ThoiGianHetHan < DateTime.Now).Delete(); var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.DangXuatThanhCong); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Kích hoạt tài khoản theo link đã gửi trong mail. /// Author : QuyPN - 20/05/2018 - create /// </summary> /// <param name="token">Token đang mã hóa Base64 được gửi đi trong mail</param> /// <param name="username">Tên đăng nhập mà user đăng ký được gửi kèm trong mail</param> /// <returns>Thông tin của việc kích hoạt tài khoản</returns> public ResponseInfo ActiveAccount(string token, string username) { DbContextTransaction transaction = context.Database.BeginTransaction(); try { ResponseInfo result = new ResponseInfo(); token = BaoMat.Base64Decode(token); TblAccount account = context.Account.FirstOrDefault(x => x.Username == username && x.TokenActive == token && !x.DelFlag); if (account == null) { result.Code = 202; } else { if (account.TimeOfToken.Value < DateTime.Now) { result.Code = 203; } else { account.IsActived = true; account.IsActiveEmail = true; account.TokenActive = ""; account.TimeOfToken = null; context.SaveChanges(); } } transaction.Commit(); return(result); } catch (Exception e) { transaction.Rollback(); throw e; } }
/// <summary> /// Tạo tài khoản cho người dùng dựa vào thông tin đã cung cấp. /// Author : HoangNM - 28/02/2019 - create /// </summary> /// <param name="newAccount">Thông tin tạo tài khoản của người dùng</param> /// <returns>Thông tin về việc tạo tài khoản thành công hay thất bại</returns> public ResponseInfo TaoAccount(NewAccount newAccount) { //DbContextTransaction transaction = context.Database.BeginTransaction(); try { ResponseInfo result = new ResponseInfo(); // Kiểm tra xem username đã tồn tại hay chưa TblTaiKhoan taiKhoan = context.TaiKhoans.FirstOrDefault(x => x.Username == newAccount.Username && !x.DelFlag); if (taiKhoan == null) { // Kiểm tra xem email đã tồn tại hay chưa taiKhoan = context.TaiKhoans.FirstOrDefault(x => x.Email == newAccount.Email && !x.DelFlag); if (taiKhoan == null) { // Tạo user mới TblThongTinNguoiDung user = new TblThongTinNguoiDung { Ten = newAccount.Ten, GioiTinh = newAccount.GioiTinh, NgaySinh = newAccount.NgaySinh, }; context.ThongTinNguoiDungs.Add(user); context.SaveChanges(); string salt = BaoMat.GetSalt(); //// Tạo tài khoản đăng nhập cho user taiKhoan = new TblTaiKhoan { Id_User = user.Id, Username = newAccount.Username, salt_Pass = salt, hash_Pass = BaoMat.GetMD5(BaoMat.GetSimpleMD5(newAccount.Password), salt), Email = newAccount.Email, Id_TrangThai = 1, Id_NhomDich = 1, Id_Face = "", Id_Google = "", Id_PhanQuyen = 5 }; context.TaiKhoans.Add(taiKhoan); // Lưu vào CSDL context.SaveChanges(); result.Code = 200; result.IsSuccess = true; result.IsValid = true; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.TaoTaiKhoanThanhCong); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } else { result.Code = 400; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.EmailDaTonTai); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } } else { result.Code = 400; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.UserNameDaDung); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } //transaction.Commit(); return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Kiểm tra thông tin tài khoản người dùng nhập vào có đúng hay không /// Author : QuyPN - 28/05/2018 - create /// </summary> /// <param name="account">Đối tượng chưa thông tin tài khoản</param> /// <returns>Đối tượng ResponseInfo chứa thông tin của việc kiểm tra</returns> public ResponseInfo CheckAccount(Account account) { try { ResponseInfo result = new ResponseInfo(); TblCauHinh cauHinh = context.CauHinh.FirstOrDefault(x => x.Id == (int)OtherEnum.IdCauHinh); TblAccount taiKhoan = context.Account.FirstOrDefault(x => x.Username == account.Username && !x.DelFlag); if (taiKhoan == null) { taiKhoan = context.Account.FirstOrDefault(x => x.Email == account.Username && !x.DelFlag); } if (taiKhoan == null) { result.MsgNo = (int)MsgNO.KhongCoTaiKhoan; result.Code = 202; } else if (taiKhoan.KhoaTaiKhoanDen > DateTime.Now) { result.MsgNo = (int)MsgNO.TaiKhoanBiKhoa; result.Code = 203; result.ThongTinBoSung1 = taiKhoan.KhoaTaiKhoanDen.ToString("HH:mm dd/MM/yyyy"); } else if (!taiKhoan.IsActived) { result.MsgNo = (int)MsgNO.ChuaKichHoatTaiKhoan; result.Code = 204; new RegisterModel().SendEmail(taiKhoan); // Thiếu code gửi email } else if (taiKhoan.Password != BaoMat.GetMD5(account.Password)) { taiKhoan.SoLanDangNhapSai += 1; result.MsgNo = (int)MsgNO.MatKhauKhongDung; result.ThongTinBoSung1 = taiKhoan.SoLanDangNhapSai + ""; result.ThongTinBoSung2 = cauHinh.SoLanChoPhepDangNhapSai + ""; result.ThongTinBoSung3 = cauHinh.ThoiGianKhoa + ""; if (taiKhoan.SoLanDangNhapSai == cauHinh.SoLanChoPhepDangNhapSai) { taiKhoan.SoLanDangNhapSai = 0; taiKhoan.KhoaTaiKhoanDen = DateTime.Now.AddHours(cauHinh.ThoiGianKhoa); result.MsgNo = (int)MsgNO.SaiQuaSoLanChoPhep; result.ThongTinBoSung1 = cauHinh.SoLanChoPhepDangNhapSai + ""; result.ThongTinBoSung2 = taiKhoan.KhoaTaiKhoanDen.ToLongTimeString(); } context.SaveChanges(); result.Code = 205; } else { taiKhoan.SoLanDangNhapSai = 0; //Chứa thông tin chuỗi token string token = Common.GetToken(taiKhoan.Id); context.TokenLogin.Add(new TblTokenLogin { IdAccount = taiKhoan.Id, Token = token, ThoiGianTonTai = DateTime.Now.AddHours(cauHinh.ThoiGianTonTaiToken) }); result.ThongTinBoSung1 = BaoMat.Base64Encode(token); context.SaveChanges(); } return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Kiểm tra thông tin tài khoản người dùng nhập vào có đúng hay không /// Author : HoangNM - 28/02/2019 - create /// </summary> /// <param name="account">Đối tượng chưa thông tin tài khoản</param> /// <returns>Đối tượng ResponseInfo chứa thông tin của việc kiểm tra</returns> public ResponseInfo CheckAccount(TaiKhoan account) { try { ResponseInfo result = new ResponseInfo(); TblTaiKhoan taiKhoan = context.TaiKhoans.FirstOrDefault(x => x.Username == account.Username); if (taiKhoan == null) { var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.KhongCoTaiKhoan); result.Code = 400; result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } else if ((taiKhoan.hash_Pass) != BaoMat.GetMD5(BaoMat.GetSimpleMD5(account.Password), taiKhoan.salt_Pass)) { result.Code = 400; var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.MatKhauSai); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } else { //Chứa thông tin chuỗi token string token = Common.Common.GetToken(taiKhoan.Id); TblToken tokenLG = new TblToken { Id_TaiKhoan = taiKhoan.Id, TokenTaiKhoan = token, ThoiGianHetHan = DateTime.Now.AddHours(24) }; context.Tokens.Add(tokenLG); context.SaveChanges(); result.IsSuccess = true; result.Data = new { Profile = new Profile() { Id_TrangThai = taiKhoan.Id_TrangThai, TenTrangThai = taiKhoan.TrangThaiTaiKhoan.TenTrangThai, Id_NhomDich = taiKhoan.Id_NhomDich, TenNhomDich = taiKhoan.NhomDich.TenNhomDich, Username = taiKhoan.Username, Email = taiKhoan.Email, Id_Face = taiKhoan.Id_Face, Id_Google = taiKhoan.Id_Google, GioiTinh = taiKhoan.ThongTinNguoiDung.GioiTinh, Ten = taiKhoan.ThongTinNguoiDung.Ten, NgaySinh = (DateTime)taiKhoan.ThongTinNguoiDung.NgaySinh, NgayHetHan = tokenLG.ThoiGianHetHan, Permissions = new QuyenProFile { TenvaiTro = taiKhoan.PhanQuyen.TenVaiTro, Id_VaiTro = taiKhoan.PhanQuyen.Id } }, Token = BaoMat.Base64Encode(token) }; result.ThongTinBoSung1 = BaoMat.Base64Encode(token); var errorMsg = new GetErrorMsg().GetMsg((int)MessageEnum.MsgNO.DangNhapThanhCong); result.TypeMsgError = errorMsg.Type; result.MsgError = errorMsg.Msg; } return(result); } catch (Exception e) { throw e; } }
/// <summary> /// Tạo tài khoản cho người dùng dựa vào thông tin đã cung cấp, sau đó gửi mail kích hoạt tài khoản. /// Author : QuyPN - 20/05/2018 - create /// </summary> /// <param name="newAccount">Thông tin tạo tài khoản của người dùng</param> /// <returns>Thông tin về việc tạo tài khoản thành công hay thất bại</returns> public ResponseInfo TaoAccount(NewAccount newAccount) { DbContextTransaction transaction = context.Database.BeginTransaction(); try { ResponseInfo result = new ResponseInfo(); TblCauHinh cauHinh = Common.LayCauHinh(); // Kiểm tra xem username đã tồn tại hay chưa TblAccount account = context.Account.FirstOrDefault(x => x.Username == newAccount.Username && !x.DelFlag); if (account == null) { // Kiểm tra xem email đã tồn tại hay chưa account = context.Account.FirstOrDefault(x => x.Email == newAccount.Email && !x.DelFlag); if (account == null) { // Tạo user mới TblUser user = new TblUser { Ho = newAccount.Ho, Ten = newAccount.Ten, Avatar = Common.defaultAvata, GioiTinh = newAccount.GioiTinh, NgaySinh = newAccount.NgaySinh, SoDienThoai = "", CMND = "", DiaChi = "" }; // Tạo tài khoản đăng nhập cho user account = new TblAccount { Username = newAccount.Username, Password = BaoMat.GetMD5(newAccount.Password), Email = newAccount.Email, TokenActive = Common.GetToken(newAccount.Username), IsActived = false, IsActiveEmail = false, TimeOfToken = DateTime.Now.AddHours(cauHinh.ThoiGianTonTaiToken), SoLanDangNhapSai = 0, KhoaTaiKhoanDen = DateTime.Now }; // Cho tài khoản thuộc vào 1 group account.GroupOfAccount.Add(new TblGroupOfAccount { IdGroup = (int)GroupAccount.User }); user.Account.Add(account); context.User.Add(user); // Lưu vào CSDL context.SaveChanges(); // Tiến hành gửi mail SendEmail(account); result.ThongTinBoSung1 = BaoMat.Base64Encode(account.TokenActive); } else { result.Code = 202; result.MsgNo = 37; } } else { result.Code = 202; result.MsgNo = 36; } transaction.Commit(); return(result); } catch (Exception e) { transaction.Rollback(); throw e; } }