pro-dev
@pro-dev

Как лучше вставлять ссылку в mail письмо?

Привет! Делаю API. Есть стандартная функциональность регистрации:
1. Запрос регистрации
2. Подтверждение регистрации

Отправку писем осуществляю через сервис SignUpConfirmTokenSender.

public function send(Email $email, string $token): void
    {
        $message = (new Swift_Message($this->translator->trans('Sig Up Confirmation', [], 'mail')))
            ->setTo($email->getValue())
            ->setBody($this->twig->render('mail/user/signup.html.twig', ['token' => $token]), 'text/html');

        if (!$this->mailer->send($message)) {
            throw new RuntimeException($this->translator->trans('Unable to send message.', [], 'error'));
        }
    }


И сам шаблон
{% extends 'mail.html.twig' %}

{% block body %}
    <p>Password Reset Link:</p>
    {% set url = url('auth.reset.reset', {'token': token}) %}
    <p><a href="{{ url }}">{{ url }}</a></p>
{% endblock %}


Сложность возникла при изменении этой ссылки в письме. Можно было бы оставить и так, как сейчас, но эта ссылка ведёт на API. Ответом которого будет не красивое окно с уведомлением о подтверждении, а json строка. Так вот как лучше теперь вставлять эту ссылку?

1. Сразу в письмо
2. Вынести в конфиги параметров
3. Передавать в контроллере и далее в сервис.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
HistoryART
@HistoryART
Молодой и дерзкий
Генерируйте ссылку на сервере допустим id юзера в bcrypt формате обрезаный на половину и заносите сразу этот код в бд, и статус ссылки можно отдельным полем, можно через двоеточие.

dsf23$fd:false/true

Следом создайте страницу на которую будет вести ваша ссылка, в параметры url передавайте тот самый шифрованный id, если всё ок, выводите кнопку подтвердить, всякие плюшки типа смайлика и приветствия - если ссылка уже true допустим, выводите мол ваш аккаунт уже активирован, бегите отсюда. по итогу ссылка должна быть подобной:

my-app.com/dsf23$fd

Дальше скрипт берёт ссылку из url, делит строку на массив по : и в итоге у вас массив из двух элементов для соответствующих проверок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы