Как перенаправить приложение на флаттер из весенней загрузки - PullRequest
0 голосов
/ 10 марта 2020

Я работал с Spring Boot и FLutter. Я работаю с password-reset функциональностью. Я хочу, чтобы, когда пользователь запрашивает сброс пароля, электронное письмо отправляется на адрес электронной почты пользователя, и после нажатия на link серверная служба проверит токен и перенаправит на страницу приложения флаттера, где Пользователь может ввести Новый пароль .

Все идет хорошо, но я не могу перенаправить на веб-страницу флаттера.

Контроллер. java

@RequestMapping(value = "/forgot-password", method = RequestMethod.POST)
    public String forgotUserPassword(@RequestParam("emailId") String emailId) {
        User existingUser = userRepository.findByEmailIdIgnoreCase(emailId);
        if (existingUser != null) {
            ConfirmationToken confirmationToken = new ConfirmationToken(existingUser);
            confirmationTokenRepository.save(confirmationToken);
            SimpleMailMessage mailMessage = new SimpleMailMessage();
            mailMessage.setTo(existingUser.getEmailId());
            mailMessage.setSubject("Complete Password Reset!");
            mailMessage.setFrom("abc@gmail.com");
            mailMessage.setText("Dear " + existingUser.getFirstName().toUpperCase() + " " + existingUser.getLastName().toUpperCase() + ",\n\n" + "You have requested to reset password. To complete the password reset process, please click here: "
                    + "http://localhost:8082/confirm-reset?token=" + confirmationToken.getConfirmationToken()");

            emailSenderService.sendEmail(mailMessage);

            return "Request to reset password received. Check your inbox for the reset link.";

        } else {
            return "This email does not exist!";
        }

    }


  String emailByPasswordRestToken = null;

    @RequestMapping(value = "/confirm-reset", method = {RequestMethod.GET, RequestMethod.POST})
    public String validateResetToken(@RequestParam("token") String confirmationToken) {
        ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);

        if (token != null) {
            User user = userRepository.findByEmailIdIgnoreCase(token.getUser().getEmailId());
            user.setEnabled(true);
            userRepository.save(user);
            emailByPasswordRestToken = user.getEmailId();
            return "valid token";
//here it should return and redirect to the activity of flutter app automatically to enter the `New Password`.
        } else {
            return "This link is broken or expired.";
        }

    }

Как я могу это сделать, пожалуйста.

1 Ответ

1 голос
/ 10 марта 2020

У вас есть два способа сделать перенаправление с вашего контроллера.

1. Используя метод HttpServletResponse#sendRedirect .

Для этого вам придется изменить сигнатуру вашей функции validateResetToken, сделать ее void и добавьте HttpServletResponse параметр:

@RequestMapping(value = "/confirm-reset", method = { RequestMethod.GET, RequestMethod.POST })
public void validateResetToken(@RequestParam("token") String confirmationToken,
                                 HttpServletResponse response) {
    // ... your logic ...

    response.sendRedirect("http://your-flutter-url/path");
}

2. Просто добавив "redirect:" в ваш ответ Строка

@RequestMapping(value = "/confirm-reset", method = { RequestMethod.GET, RequestMethod.POST })
public String validateResetToken(@RequestParam("token") String confirmationToken) {
    // ... your logic ...

    return "redirect:http://your-flutter-url/path"
} 

Примечание: Не очень уверен, будет ли работать перенаправление, когда запрос POST. Поэтому я также изменил бы RequestMapping, чтобы принимать только GET запросов. Вы можете изменить его на:

@GetMapping("/confirm-reset")
public String validateResetToken(@RequestParam("token") String confirmationToken)
...