비밀번호를 잊어버리거나 비밀번호를 잊어버리면 바꿔줘야 한다.
내가 만들고 있던 거에는 Firebase로 로그인을 했기 때문에 Firebase의 비밀번호 변경 이메일을 전송하려고 한다.
firebase문서에서는 다음과 같이 안내하고 있다.
그런데 흠.. 아직도 actionCodeSettings가 뭔지는 잘 모르겠다.
이메일 보내는 거는 그냥 이전 글에서 쓴 방법대로 그대로 가져왔다.
링크 생성은 위의 사진대로 GeneratePasswordResetLinkAsync 메서드를 사용하면 된다. (await 안 써주면 링크가 이상한 거로 만들어진다)
var link = await FirebaseAuth.DefaultInstance.GeneratePasswordResetLinkAsync(email);
MailMessage message = new MailMessage {
From = new MailAddress("inhu.app.manager@gmail.com"),
Subject = "Inhu.kr의 비밀번호 변경",
Body = $"안녕하세요.<br/><br/>" +
"다음 링크를 통해 비밀번호를 변경하세요<br/><br/>" +
$"{link}<br/><br/>" +
"비밀번호 변경을 요청하지 않았다면, 이 이메일을 무시하셔도 됩니다.<br/>" +
"감사합니다.",
IsBodyHtml = true,
DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure,
SubjectEncoding = Encoding.UTF8,
BodyEncoding = Encoding.UTF8
};
message.To.Add(new MailAddress(email));
using(SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)) {
smtp.Timeout = 5000;
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new System.Net.NetworkCredential(MailAddress, AppPassword);
try {
smtp.Send(message);
message.Dispose();
}
catch {
ModelState.AddModelError("Error", "발송에 실패하였습니다. 나중에 다시 시도하십시오");
}
}
코드 복-붙 (자세한 내용은 이쪽에서 -> https://chicken1910.tistory.com/27)
이렇게 작성하면 메일이 잘 날라온다.
링크를 따라 들어가면 비밀번호를 바꿀 수 있는 창이 나타난다.
새 비밀번호를 적어주고 저장하면 알아서 비밀번호를 바꿔준다.
여담으로 이전 글에서 사용자를 생성할 때 비밀번호를 Bcrypt로 해시해서 저장을 시키고, 로그인 시 비밀번호의 해시값을 넘겨서 비교했는데... 이러니까 재설정된 비밀번호는 평문이고, 로그인하려고 전달하는 비밀번호는 해시된 값이여서 둘이 다르다고 로그인을 안 시켜줬었다..
이 글에서는 비밀번호 재설정을 할 수 있는 코드를 올렸는데,
비밀번호 재설정 말고도
이메일 확인의 경우
var link = await FirebaseAuth.DefaultInstance.GenerateEmailVerificationLinkAsync(email);
로그인의 경우
var link = await FirebaseAuth.DefaultInstance.GenerateSignInWithEmailLinkAsync(email, actionCodeSetting);
과 같이 2개 더 있긴 하다. 그런데 로그인은 나머지와 달리 ActionCodeSetting의 매개변수가 하나 더 필요하다. 얘는 뭔지 잘 몰라서... 패스...
참고로 Gamil SMTP를 이용하는데 있어서 제한이 있다. 하루 200통까지만 보낼 수 있다던가? 정확한 수는 기억이 나지 않지만.
'C# > ASP.NET Core' 카테고리의 다른 글
[Asp.net core] Firestore 저장할 때 자료형 주의할 거 (0) | 2023.05.07 |
---|---|
[Asp.net core] View에서 Controller로 데이터 전달 (전달할 것이 List일 때) (0) | 2023.05.07 |
[Asp.net core] Firebase Storage에 사진 업로드&다운로드 (0) | 2023.05.07 |
[Asp.net core] 이메일 전송 구현했던거 (0) | 2023.05.06 |
[Asp.net core] Firebase 인증 구현기 (0) | 2023.05.05 |