【问题标题】:CakePHP: email validate action doesn't work when clicking on the email linkCakePHP:单击电子邮件链接时电子邮件验证操作不起作用
【发布时间】:2010-01-20 07:47:46
【问题描述】:

我们已经创建了我们网站的电子邮件验证部分。我们使用 CakePHP BTW 构建了这个站点。

问题是当我们点击电子邮件中的链接时它不起作用。电子邮件以纯文本形式发送。

奇怪的是,当我们将链接粘贴到地址栏上时,它可以工作。此外,当使用 Gmail 和桌面电子邮件客户端单击链接时,它也可以正常工作。其他电子邮件提供商不起作用。

编辑:

其他信息:

验证示例链接:http://localhost/users/validate/validatecodeblah12c023

当它工作时,它应该登录用户并重定向到用户仪表板。

当它不工作时它会转到首页(见上面的描述)。

附加信息 2:

我确实使用 Live HTTP 标头比较了结果,我发现它唯一没有推送通过(由于某种原因进入登录页面)是当有一个“推荐人:http://mail.yahooblahblah...”时由于某种原因,Gmail 的标题中没有“Referer”行。

【问题讨论】:

  • 你需要提供比这更多的细节...什么链接,它应该做什么,它不做什么?

标签: email cakephp


【解决方案1】:

仍然是一个非常模糊的问题,但这里是:

  • 链接没问题,您已通过复制和粘贴验证它可以正常工作
  • 在某些电子邮件客户端中单击它时会起作用
  • 呃,再一次,链接没问题

这会导致您无法在某些电子邮件客户端中单击它。由于您不是自己链接文本而是以纯文本形式发送,因此是电子邮件客户端自动进行链接。 URL 中可能存在使电子邮件客户端关闭的字符:

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

所有奇怪的字符都可能是 URL 的一部分,但电子邮件客户端会感到困惑,并认为 $ 字符之后的部分不再属于 URL,而只会链接到该部分。因此,单击时链接将不同并且可能无效。解决方案:使用更简单的字符或urlencode

也许也只是链接被换行,这破坏了自动链接。在这种情况下,请重新布局电子邮件或使用较短的 URL。

【讨论】:

  • 验证码是 md5/sha1 + salt hash。它仍然会使用哈希中的字符使链接无效吗?
  • 该链接不一定无效,它可能只是出于某种原因使电子邮件客户端出错。没有更多细节,很难给出更好的答案。
  • AFAIK,浏览器在发送请求时并不关心链接的来源(点击或粘贴)。您确定您有一个不会被电子邮件客户端截断的有效链接(如 deceze 所述)吗?如果您将无效的 URL 输入到您的应用程序中,您可能会将其重定向到主页,这就是您看到这种行为的原因。尝试使用 FF 插件 Live HTTP 标头来查看您发出的实际原始请求是什么,看看 deceze 对于不包含“无效”字符的电子邮件客户端是否正确。
  • 或者简单地说,不是单击电子邮件客户端中的链接,而是右键单击它并选择复制链接(大多数电子邮件客户端/浏览器有该选项),然后将其与纯文本链接进行比较。
  • 我确实使用 Live HTTP 标头比较了结果,我发现它唯一没有通过(由于某种原因进入登录页面)是当有一个“推荐人:@987654322 @...' 由于某种原因,Gmail 的标题中没有“Referer”行。
【解决方案2】:

这听起来可能很傻,但您是否使用了 Auth 组件并在您允许的操作上添加了validate 操作?

您的beforeFilter 上的UsersController 上应该有$this->Auth->allow(array('validate'));

我的一个朋友也有同样的问题。他正在通过身份验证的浏览器上对其进行测试,当然它会起作用。但是在不同的浏览器上测试,它会将他重定向到登录页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2017-03-27
    • 1970-01-01
    • 2017-05-27
    • 2012-08-19
    • 2019-01-01
    相关资源
    最近更新 更多