2016-01-12 3 views
1

Я использую java-почту и активацию для отправки электронной почты пользователю. Когда пользователь нажимает кнопку «забыть пароль», почта должна быть отправлена ​​по электронной почте пользователя со ссылкой для сброса пароля.Отключить ссылку после клика, отправленного через JavaMail

Я не хочу пользователю использовать ту же ссылку снова, так что, когда он нажимает на ссылку из письма ... ссылка должна отключенным ..

Я не знаю, как это сделать ...

String body = "<a href='resetpage.jsp'>Reset Password</a>"; 
Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(username)); 
     message.setRecipients(Message.RecipientType.TO, 
      InternetAddress.parse(email)); 
     message.setSubject("Password Reset"); 
        MimeBodyPart mbp = new MimeBodyPart(); 
     mbp.setText(body, "UTF-8", "html"); 

        Multipart multipart = new MimeMultipart(); 
        multipart.addBodyPart(mbp); 

        message.setContent(multipart); 

     Transport.send(message); 

Из этого кода я получаю ссылку по электронной почте .. но теперь после того, как пользователь щелкнул ссылку по электронной почте .. ссылка должна быть отключена .. или я хочу убедиться ... когда пользователь снова нажмет на эту же ссылку он не должен работать.

+0

Я никогда не видел письмо с содержанием, как это ... Когда я использую напоминание пароля, сервер разрешает использовать ссылку только один раз, сервер отвечает за это. Вы видели электронную почту с таким содержанием? ты уверен? – amkz

ответ

1

Если я вас правильно понял вы хотели бы, чтобы позволить пользователю для щелкните ссылку, которая будет иметь некоторые функциональные возможности, а затем приведет к недействительности ссылки, чтобы гарантировать, что ее нельзя использовать повторно для выполнения другого изменения.

То, что я хотел бы предложить:

  • Сформировать фишку своего рода UUID.randomUUID() ToString() будет работать хорошо..
  • Храните маркер в базе данных с чем-то, чтобы указать, кто именно и какие функции она позволит (Joe Soap, сброс пароля)
  • Отправить URL для пользователя, включая? Лексема = [token_string_here]
  • Когда загрузка страницы проверяет наличие токена и отображает функцию, которую вы хотите сделать доступной.
  • Когда код вносит изменения в пользовательском/счет, убедитесь, что маркер снова существует перед выполнением действия, а затем удалить маркер из базы данных
1

Вы подумали об использовании случайного токена для этого? Этот токен может быть включен в ссылку (reset.jsp? Token = RANDOM) Всякий раз, когда пользователь перенаправляется на страницу сброса, он может прочитать данный токен и пометить его как использованный.

Когда используемый токен используется снова, вы можете перенаправить пользователя на другую страницу (например, страницу входа или страницу с ошибкой).

(Я знаю, что это не может быть полный ответ на ваш вопрос, но я не могу добавить комментарий к вашему вопросу.)

Смежные вопросы