【发布时间】:2019-08-05 09:42:26
【问题描述】:
我正在使用 Spring、Hibernate、MVC、Maven 和 Tomcat 构建应用程序。 我完成了本教程中的所有操作:
https://stackabuse.com/spring-security-email-verification-registration/
- 所以现在我有了这个:
-用户注册新帐户(验证等)
-用户在确认激活电子邮件已发送到他的电子邮件地址时重定向到站点
-在数据库中,我在用户和他的令牌之间建立了正确的连接
-i 正确收到一封带有唯一令牌的电子邮件,如下所示:
你好用户!
要激活您的帐户,请点击下面的链接
http://localhost:8080/confirm-account?token=5e5aad4f-90c4-4f83-8f58-83b66d63659f
但是当我复制并粘贴该链接时(我不知道为什么我没有链接——我认为它现在不重要了)我得到了错误 404。就像 api 没有这个地址一样。
现在我向您展示我的控制器以及注册和确认帐户
@PostMapping("/add")
public String addUser(@ModelAttribute @Valid User user, Model model, BindingResult bindingResult, HttpServletRequest request) throws MessagingException {
User user1 = userRepository.findByEmail(user.getEmail());
User user2 = userRepository.findByUsername(user.getUsername());
if (user1 != null) {
bindingResult.rejectValue("email", "error.email", "Jest juz taki email w bazie!");
return "register_user";
}
if (user2 != null) {
bindingResult.rejectValue("username", "username.error", "Ta nazwa jest w użyciu");
return "register_user";
} else if (bindingResult.hasErrors()) {
return "register_user";
} else {
userRepository.save(user);
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenRepository.save(confirmationToken);
emailSender.sendMail(user.getEmail(),"Konto w serwisie","<b>Witaj " + " "+ user.getFirstName()+"!</b>" +"<br> Dokonałeś rejestracji!" +
"<br>Aby dokończyc proces musisz kliknąć w link który znajduje się poniżej:<br> "
+ "http://localhost:8080/confirm-account?token=" + confirmationToken.getConfirmationToken());
model.addAttribute("confirmationMessage", "Pomyślnie utworzyłeś konto!Potwierdzenie wysłane na adres" + user.getEmail());
return "success";
}
}
并确认
@RequestMapping(value="/confirm-account", method= {RequestMethod.GET, RequestMethod.POST})
public String confirmUserAccount(Model model, @RequestParam("token")String confirmationToken)
{
ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);
if(token != null)
{
User user = userRepository.findByEmail(token.getUser().getEmail());
user.setEnabled(true);
userRepository.save(user);
return "accountVerified";
}
else
{
model.addAttribute("message", "The link is invalid or broken!");
return "error";
}
}
谢谢!
【问题讨论】:
-
您要调用哪个网址
/add?另一个应该是完全相同的,而不是/add它应该是/confirm-account(假设这两种方法都在同一个控制器中!)。 -
我的上帝...就是这样...我只是将它放在具有 /user 地址的控制器中...现在与 localhost:8080/user/confirm 的确认链接正在工作!谢谢!我简直不敢相信!
-
只需使用构建器,这样可以防止您出现此类错误。
-
非常感谢!它节省了我的一天!现在我肯定会使用它:D
标签: spring hibernate maven tomcat