Расшифровать случайную ошибку с помощью встроенных в 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']));
чтобы убедиться, что он будет действительным.