V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NARUTOzp
V2EX  ›  程序员

Node.js 如何做邮箱验证(结合 nodemailer)

  •  
  •   NARUTOzp · 2016-09-03 13:02:11 +08:00 · 5914 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。

        要做邮箱验证,就是在注册的时候除了用户名密码外还需要输入一个有效邮箱,然后通过 nodemailer 发送一份验证邮件到填写的邮箱。收到邮件后点击邮件里的链接则注册成功,将字段写入数据库。
        小的想请问 v 友们,这个发送去注册邮箱里的邮件内容怎么写?如何写才能做到他那边一点验证的链接就通过验证然后将字段写入数据库呢。= =

    13 条回复    2016-09-03 18:26:20 +08:00
    cccRaim
        1
    cccRaim  
       2016-09-03 13:04:56 +08:00 via iPhone   ❤️ 1
    随机字符串就可以了
    aeshfawre
        2
    aeshfawre  
       2016-09-03 13:07:03 +08:00   ❤️ 1
    注册完之后——>随机生成一个字符串-> 在 redis 中存储这个字符串对应的用户 id -> 发送包含这个字符串的链接给邮箱 ->用户点击链接,后台根据这个字符串,获取对应用户 id ->设置这个用户 id 状态为激活状态。
    NARUTOzp
        3
    NARUTOzp  
    OP
       2016-09-03 13:07:42 +08:00
    @cccRaim 额,何解?能请您稍微说具体点么,小的不是很明白。 0_0
    aeshfawre
        4
    aeshfawre  
       2016-09-03 13:11:13 +08:00
    另一种模式就是:
    注册的过程中 -> 随机生成一个字符串 -> 在 redis 中设置当前注册的 id 对应这个字符串 -> 发送邮件,提示激活码为这个字符串 ->显示一个网页,提示需要输入邮箱接收到的字符串 -> 用户去邮箱中复制出这个字符串,粘贴到网页中 -> 提交字符串 提示注册成功,否则失败。
    NARUTOzp
        5
    NARUTOzp  
    OP
       2016-09-03 13:12:21 +08:00
    @aeshfawre 哦,这个是通过注册完再激活来处理,谢谢,这个好。那如果是希望在对方点击验证链接前不能完成注册那应该怎么做呢。就是会卡在注册界面那种,验证后才能进入首页。= =
    NARUTOzp
        6
    NARUTOzp  
    OP
       2016-09-03 13:12:56 +08:00
    @aeshfawre 哦,好的,非常感谢。
    NARUTOzp
        7
    NARUTOzp  
    OP
       2016-09-03 13:23:05 +08:00
    @aeshfawre 额,小的用的是 MongoDB ,在没验证时注册是失败的,就是没验证的话不会有记录存入数据库,就没有_id 了,点击验证链接才将记录存入,这个肿么破呢.0_0||
    aeshfawre
        8
    aeshfawre  
       2016-09-03 13:35:44 +08:00   ❤️ 1
    这个。。。
    注册过程中,用户输入的信息可以临时存放在 mongodb 中撒,最好是 redis 。
    根据 cookie 对应这个临时存放的用户信息,不需要啥 id 啊,只需要将这个激活码存放在这用户信息里面。
    他提交的激活码与你临时存放的激活是不是对应,不对应就注册失败,不入库。符合就入库,根本就不需要啥用户 id 的。
    HFcbyqP0iVO5KM05
        9
    HFcbyqP0iVO5KM05  
       2016-09-03 13:42:34 +08:00 via Android
    那就在注册的第一步只要用户填写邮箱,然后发送一枚 token 作为 parameter 的 URL 到用户邮箱,用户再点击这个 URL 进入后续的注册操作。

    用户点击这个 URL 注册的时候需要验证他再次填写的邮箱和第一步填写的邮箱一致,不然不予以注册通过。

    这枚 Token 可以存在服务端的 redis 中, key , value 就设置成 token, email ,设定比如 15 分钟的期限。

    不知道这样可以不可以😁
    NARUTOzp
        10
    NARUTOzp  
    OP
       2016-09-03 13:47:29 +08:00
    @aeshfawre 恩,好,我去试试。辛苦啦^_^
    NARUTOzp
        11
    NARUTOzp  
    OP
       2016-09-03 13:48:03 +08:00
    @gulu 额,可以试试。^_^
    qfdk
        12
    qfdk  
       2016-09-03 17:34:44 +08:00 via iPhone   ❤️ 1
    很简单嘛 数据库 用户名加个字段 1 或者 0 判断激活没有 然后随机字符串无所谓 直接 md5 他的信箱就好了 看我多机智。点击了 update 一下数据库
    NARUTOzp
        13
    NARUTOzp  
    OP
       2016-09-03 18:26:20 +08:00
    @qfdk 如此机智,我竟无言以对=_=
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:26 · PVG 12:26 · LAX 20:26 · JFK 23:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.