2010-01-20 2 views
0

Мы создали часть проверки электронной почты нашего сайта. Мы создали сайт, используя CakePHP BTW.CakePHP: проверка подлинности электронной почты не работает при нажатии на ссылку электронной почты

Проблема в том, что она не работает, когда мы нажимаем на ссылку в письме. Письмо отправляется как обычный текст.

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

EDIT:

Дополнительная информация:

Пример ссылки для проверки: http://localhost/users/validate/validatecodeblah12c023

Когда он работает его необходимо войти в систему пользователя и перенаправить на приборную панель пользователя.

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

Дополнительная информация 2:

Я сделал сравнение результатов с использованием живых заголовков HTTP, и я обнаружил, что единственный раз, когда он не протолкнуть (идет на страницу входа в систему по какой-то причине) это когда есть a 'Referrer: http://mail.yahooblahblah ...' По какой-то причине Gmail не имеет строки 'Referer' в своих заголовках.

+0

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

ответ

0

Еще очень расплывчатый вопрос, но здесь идет:

  • ссылка хорошо, как вы убедились, что он работает на копии и вставив
  • это работает, когда вы нажимаете на него в некоторых почтовых клиентах
  • эрго, опять же, ссылка хорошо

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

http://example.com/users/validate/1j423-k1j234-nc183&$+-123894 
----------------------------------------------------- 

Все странные символы могут быть частью URL, но клиенты электронной почты запутывается и думает, что часть после того, как $ символ не принадлежит к URL больше и только ссылки до этой части. Следовательно, при щелчке ссылка будет отличаться и, возможно, недействительна. Решение: используйте более простые символы или urlencode.

Возможно, это также связано с тем, что ссылка получает линию, которая прерывает автоматическую привязку. В этом случае переформатируйте электронную почту или используйте более короткий URL.

+0

код проверки - это хеш md5/sha1 + salt. будет ли он по-прежнему делать ссылку недействительной с использованием символов в хэше? – bakerjr

+0

Ссылка не обязательно * недействительна *, она может просто отключить почтовые клиенты по той или иной причине. Без каких-либо подробностей трудно дать лучшие ответы. – deceze

+1

AFAIK, браузер не заботится о создании ссылки (щелчок или вставка) при отправке запроса. Вы уверены, что у вас есть действующая ссылка, которая не усекается почтовым клиентом (как описано в deceze)? Он подает неверный URL-адрес в ваше приложение, вы можете перенаправить его на домашнюю страницу, поэтому вы видите это поведение. Попробуйте использовать FF-плагин Live HTTP-заголовки, чтобы узнать, что представляет собой оригинальный исходный запрос, чтобы увидеть, правильно ли исправлены ошибки почтовых клиентов, включая недействительные символы. –

0

Это может показаться глупым, но вы используете компонент Auth и добавили действие validate на свое разрешенное действие?

Вы должны $this->Auth->allow(array('validate')); на вашем beforeFilter на UsersController

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

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