先看业务流程图
- 创建用户
- 生成激活令牌
- 产生加密摘要
- 发送邮件
- 设置收发人信息
- 生成模板,保存激活令牌
- 发送邮件
- 验证邮箱
- 点击链接
- 激活用户
下面我们来一步步完成
生成激活令牌
激活令牌即一串随机字符串,这个激活令牌会作为邮件中激活链接的用户id标识。至于为什么不直接用用户id,我想除了要尽可能少的暴露网站信息,大概也是不想让网站的用户数量暴露出去吧。总之我们接下来要做的就是在用户注册时生成一串随机的字符串,使其与该用户一一对应(激活令牌没有必要是唯一的,就像不同的用户可以有相同的密码)。幸运的是,Ruby标准库中的SecureRandom模块的urlsafe_base64方法刚好能满足我们的需求。
$ rails console
>> SecureRandom.urlsafe_base64
=> "G45xA_SvjMrr0edKuB5lnQ"
产生加密摘要
加密摘要即将激活令牌单向加密后的字符串。就像表中每个用户存有一个单向加密的密码一样,加密后的激活令牌(加密摘要)也需要保存在用户表中。
我们可以使用bcrypt插件对激活令牌进行单向加密: