【问题标题】:Prepopulate username based on link clicked in email根据电子邮件中点击的链接预填充用户名
【发布时间】:2012-11-08 16:21:35
【问题描述】:

我正在向用户发送电子邮件。在这封电子邮件中,他们必须单击一个链接,将他们带到我网站的登录页面:
www.testsite/login

我想为他们预先填写用户名(电子邮件地址)。

我正在考虑简单地调整发送给他们的链接以包含它:
www.testsite/login?email=tester@test.com

然后我可以使用一些 javascript 来提取此信息并将其放置在表单字段中。

我希望人们对这种方法有所了解。
安全吗?有没有更好或更简单的方法来实现它?这种方法有什么问题吗?

顺便说一下,我的应用使用 grails 1.3.7。

谢谢

【问题讨论】:

  • Cookie 更安全.. 否则会话.. 为什么要在查询字符串中显示它
  • 不使用javascript来预填充输入,为什么不在服务器端呢?
  • 绝对是服务器端。如果您可以向他们发送电子邮件,那么您可以生成某种唯一 ID。将该 ID 放入查询字符串中,然后查找该 ID,然后将电子邮件放入来自服务器的表单中。
  • 好的.....我遗漏了一些重要信息。我实际上并没有从我的服务器发送电子邮件。管理员用户单击我的“管理员”应用程序上的链接。然后,此应用程序会打开用户的默认电子邮件客户端,并预先填充“收件人”、“主题”和“正文”,其中包含要单击的链接。然后管理员用户从他们的电子邮件客户端发送电子邮件。 “收件人”字段中的人会收到电子邮件并点击链接!我希望在消费者应用程序中预填充此用户的电子邮件。
  • 您仍然可以在服务器端执行此操作。当他们点击电子邮件中的链接时,它应该会点击一个控制器,该控制器可以抓取电子邮件,放入请求范围,然后呈现您的表单并填充电子邮件。

标签: javascript grails


【解决方案1】:

虽然在服务器端预填充它可能会更好,但这里是对 Stack Overflow 上another answer 的修改:

function getEmailFromUrl(){
   var regexS = "[\\?#&]email=([^&#]*)";
   var regex = new RegExp(regexS);
   var results = regex.exec(window.location.search);
   if(results == null) return "";
   else return decodeURIComponent(results[1].replace(/\+/g, " "));
}

然后,使用该函数的结果来填充文本框:

document.getElementById('email_address').value=getEmailFromUrl();

希望这会有所帮助。

【讨论】:

猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多