【发布时间】:2022-08-09 18:10:19
【问题描述】:
我创建了一个登录页面,我正在获取用户电子邮件 ID,然后我正在生成一个 otp 并发送给用户邮件。现在我想通过使用他的 mailid 将数据库中生成的 otp 保存到特定用户。但问题是当我将 otp 保存在数据库中时,它没有存储在给定的 mailid 中,我无法弄清楚。
我的代码:
SendOtp 代码:
public String sendOtp(@RequestParam(\"email\") String email) {
// int otp = random.nextInt(999999);
String otp = RandomString.make(8);
String subject = \"OTP from session-handling-proj By Harshit\";
String toEmail = email;
String body = \"OTP : \" + otp;
SessionHandling sessionHandling = new SessionHandling();
sessionHandling.setOneTimePassword(otp);
repo.save(sessionHandling);
this.emailService.sendMail(toEmail, subject, body);
return (\"success\");
数据库:
Id | password | emailid | name | Cpass | otp | time
8 | 123 | shy@gmail.com | shymm | 123 | NULL | NULL
9 | NULL | NULL | NULL | NULL | Wi0ioiuZ | NULL
10 | NULL | NULL | NULL | NULL | R98RT1OZ | NULL
当我尝试存储 otp 时,它创建了新行,即 9 和 10。
-
你认为
new SessionHandling()和随后的repo.save(sessionHandling);会做什么?您认为存储库如何知道它应该更新特定记录而不是添加新记录? - 您可以做的一件事是首先通过邮件 ID 读取记录,然后添加 OTP 并再次保存。或者使用更新查询,这样您就不必阅读了。 -
就是这样,当您创建一个新对象(新
SessionHandling)时,会创建一个新行。您使用 JPA 存储库吗? -
顺便说一句,您可能出于学习目的而这样做,所以请保持简单。但是在生产环境中这样做时,您会在该设计中遇到一个很大的安全漏洞:OTP(和任何其他密码)应该绝不以纯文本形式存储,而是进行散列和加盐处理,以便只有用户知道。
-
@Jedupont 是的,我做了 Repository 类
-
@Thomas 现在出于学习目的,我直接存储密码。
标签: java spring spring-boot