用户注册后邮件激活的功能怎么做?
发布于 8 年前 作者 fineday009 9018 次浏览 来自 问答

如题,最近一个练手的项目中需要做这个功能,之前没有做过。

希望回答能贴近细节一些,大体的东西我是明白的

8 回复

邮件链接访问你的一个get请求方法的接口就可以吧,然后为了安全性可以加上过期时间,url编码等

可以看看 cnode 的代码,有这个功能

注册后,往邮件发送表里生成一条记录, “邮箱地址,内容,是否发送过” 然后再写个定时服务,每隔30秒到1分钟去查邮件发送表,没发送过的,全取出来,然后发一条,更新一下是否发送的字段。

我是生成一串哈希,然后放在数据库,设置失效时间,当用户点击激活的时候,如果能够取到数据并且在时间内,完成激活设置true.时间超出则删除记录。。。。 如果是redis的话,设置完,直接查询就好。。。

来自酷炫的 CNodeMD

我的操作是mongo 设定过期时间,设定任意字符串对应用户,发送链接到邮箱,链接是加密过的,然后核实解密,判断最终验证状态

谢谢大家的思路,我最后的做法是: 1、生成url: http://www.xxx.com:3000?email=ABC.com&token=fhasjkfhadjflfjalkdfjkadfhdjakhgfhadgfhdjagfajfhadfhadsfda 其中token的生成通过代码: userData.activation_token = cryptoHelper.encrypt( userData.email + ‘|’ + new Date(), ‘aes192’, cryptoHelper.key); 即使用aes192对称算法对email和加密时间进行对称加密。

2、当用户点击该url时,解密token。首先判断解密后的字符串是否合法(比如@后是否有|等方式),之后计算token的加密时间与现在时间的距离,判断是否大于某一阀值,以判断是否过期。

3、这种方式是我自己YY的,暂时这么做了,谢谢大家的想法,给了我一个整体的思路。

  1. 用库,如 https://nodemailer.com/
  2. 用第三方服务,如 https://sendgrid.com/
  3. 把库和服务结合起来,例子如 https://sendgrid.com/blog/sending-email-nodemailer-sendgrid/
  4. 不要用SMTP,对非大量邮件不需要引入队列,直接发就行了
  5. 不要把服务认证key或者登入用户名与密码存在文件里,不要hard code,不要commit进git,用部署系统产生配置文件

生成密钥和过期时间附在链接发出去,用户点击后通过UID查询判断这个密钥和过期时间是否合法基本就可以了

回到顶部