Расшифровать случайную ошибку с помощью встроенных в Laravel средств шифрования

Я отправляю приглашение по почте пользователям с зашифрованным письмом, чтобы узнать, какой пользователь отвечает на приглашение. Что-то вроде:

Здравствуйте, нажмите на эту ссылку, чтобы начать обучение: https://example.org/start-learning?e=fwTreaN0WybffXdDfZZUNYB3FTFfZObCb7QFF5C4AFJvTjXabIPtRfcoXLkFYMUvD4FIZsmrDdEFN2OPKcTrAOSQLZfuKdfwcic1WtBxWSXWR1GEJD6we213A3BEPBpca0BxaaQ4GGMPFeRyXp6fPrG9WnTgWogwXUcnVtdwSEEdNHGuZsClTxR2AtD2JZN8VAEsRQKpFFShEDR2SET4KxGhLGM3M0FdDelrJtO8KXS2YRaddH==

Зашифрованная электронная почта - длинная строка выше. Я кодирую почту, как это в Mailable учебный класс:

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']);

Тогда это $url добавляется в шаблон почты следующим образом:

<a href="{{$url}}>click me<a>

Затем, когда пользователь щелкает ссылку, он направляется к контроллеру, и контроллер дешифрует полезную нагрузку:

decrypt($request->input('e'));

Тогда примерно 99% людей нажимают на ссылку. Но примерно на один процент это не работает, у меня ошибка расшифровки. И я не знаю почему. Это то же самое приложение Laravel, которое шифрует и дешифрует. Есть ли причина для такого странного поведения?

Примечание: я знаю, что расшифровка всегда работает и не имеет случайного поведения (кстати, я проверила это на 10000 записей, все в порядке). Должно быть что-то еще с почтовым процессом, которого я не понимаю.

1 ответ

Я думаю, что вы должны использовать urlencode() при создании ссылки так вместо:

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']);

вы должны использовать:

$url = 'https://example.org/start-learning?e=' . urlencode(encrypt($this->to[0]['address']));

чтобы убедиться, что он будет действительным.

Другие вопросы по тегам