public async Task <IActionResult> Edit(RequestEditMember member) { var edit = _context.Members.Where(r => r.ID == member.ID); Regex regex = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{10,30}$"); if (edit.Any()) { var data = edit.FirstOrDefault(); if (data.Password != StringEncryptExtension.aesEncryptBase64(member.OldPassword, data.Email)) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "舊密碼輸入錯誤" })); } if (!regex.IsMatch(member.Password)) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "字串長度在 10 ~ 30 個字母之間,且至少一個小寫英文字母、大寫英文字母和數字。" })); } if (member.Password != member.chkPassword) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "密碼與確認密碼不符合" })); } try { data.Password = StringEncryptExtension.aesEncryptBase64(member.Password, data.Email); data.Name = member.Name; data.IsVerify = member.IsVerify; await _context.SaveChangesAsync(); if (!string.IsNullOrEmpty(member.OldPassword)) { HttpContext.Session.Remove("JWToken"); } return(Ok()); } catch (Exception ex) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "修改資料失敗" })); } } else { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "查無資料" })); } }
public async Task <IActionResult> Forget(string Account) { var member = _context.Members.Where(r => r.Email == Account); if (member.Any()) { string newPassword = RandomPasswordExtension.CreateRandomPassword(); try { var message = new MimeMessage(); message.From.Add(new MailboxAddress("胡家幸福蜂蜜管理人員", "*****@*****.**")); message.To.Add(new MailboxAddress(member.FirstOrDefault().Name, member.FirstOrDefault().Email)); message.Subject = "忘記密碼重設"; message.Body = new TextPart("plain") { Text = @"你好,你的新密碼為" + newPassword + ",請使用此密碼重新登入並重設密碼。" }; using (var client = new SmtpClient()) { // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS) client.ServerCertificateValidationCallback = (s, c, h, e) => true; client.Connect("smtp.office365.com", 587, false); // Note: only needed if the SMTP server requires authentication client.Authenticate("*****@*****.**", "RGIRaal2"); await client.SendAsync(message); client.Disconnect(true); } } catch (Exception ex) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "發信失敗" })); } member.FirstOrDefault().Password = StringEncryptExtension.aesEncryptBase64(newPassword, member.FirstOrDefault().Email); await _context.SaveChangesAsync(); } return(Ok()); }
public async Task <IActionResult> Create(RequestMembers member) { Regex regex = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{10,30}$"); if (!regex.IsMatch(member.Password)) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "字串長度在 10 ~ 30 個字母之間,且至少一個小寫英文字母、大寫英文字母和數字。" })); } if (member.Password != member.CheckPassword) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "密碼與確認密碼不符合" })); } member.Password = StringEncryptExtension.aesEncryptBase64(member.Password, member.Email); try { var mem = new Members() { Email = member.Email, IsVerify = member.IsVerify, Name = member.Name, Password = member.Password }; _context.Add(mem); await _context.SaveChangesAsync(); return(Ok()); } catch (Exception ex) { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "註冊失敗" })); } }
public IActionResult Login(RequestLogin login) { login.Password = StringEncryptExtension.aesEncryptBase64(login.Password, login.Account); var target = _context.Members.SingleOrDefault(r => r.Email == login.Account && r.Password == login.Password && r.IsVerify == true); if (target != null) { TokenProvider _tokenProvider = new TokenProvider(); //Authenticate user var userToken = _tokenProvider.LoginUser(target); if (userToken != null) { //Save token in session object HttpContext.Session.SetString("JWToken", userToken); } return(Redirect("~/Members/Index")); } else { return(StatusCode(Status400BadRequest, new ResponseMessage { Message = "登入失敗" })); } }