从用户电子邮件创建哈希/令牌以进行电子邮件验证

2023-12-25

任何人都可以帮我解答如何从用户输入(电子邮件地址)创建安全令牌(或哈希)的问题。我想制作一个用于注册的电子邮件验证系统。

  • 用户使用电子邮件地址和密码注册
  • 我想创建一个唯一的 URL,并将其发送给用户(因此出现了问题)
  • 我将这些(安全地)存储在临时表中
  • 用户通过发送的 URL 验证自己

我的问题是这个 URL 应该是什么样子。我认为我应该通过将电子邮件地址编码到其中,将 URL 保存到临时表中来使其唯一,当用户打开链接时,我会比较两者。如果匹配,我会将凭证移至真实表中。

您有关于这个主题的任何好的资源吗?我的后端有nodejs。谢谢


我认为你的方法也是正确的。我在 Express (REST API) 中使用类似的方法完成了电子邮件验证。我已经使用了 JSON Web 令牌(jwt-简单包)对 email_id、user_id 和 expiry_date 进行编码(用于检查在用户注册的电子邮件地址上发送的链接的有效性)。

然后将此编码数据附加到链接 例子 :http://your_backend_server_link/verifyEmail/1234567890afshgdf http://your_backend_server_link/verifyEmail/1234567890afshgdf..

   router.post('/AddUser', function(req, res, next) {
    var user = new User();
    user.name = req.body.name;
    user.email = req.body.email;
    user.is_verified = false;

    user.save(function(err,user){
       if(err){
           console.log(err);
           res.json(err);
       } else{
           console.log("User data saved");

           var transport = mailer.createTransport({
               service : "Gmail",
               auth : {
                   user : config.central_email,
                   pass : config.central_email_password
               }
           });

//           tommorow's date
           var info = {};
           info.user = user;
           info.expiry = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
           var token = jwt.encode(info,config.secret);
           console.log("http://localhost:3000/verifyEmail/" + token);

           var mailOptions = {
               from : "TEST<[email protected] /cdn-cgi/l/email-protection>",
               to : user.email,
               subject : "Welcome to TEST",
               text : 'Visit this http://localhost:3000/verifyEmail/'+token,
               html : '<a href="http://localhost:3000/verifyEmail/'+token+'"><H2>Click on this</H2></a>'
           }
           transport.sendMail(mailOptions,function(email_err,email_data){
               if(email_err){
                   console.log(email_err);
                   res.json(email_err);
               }else{
                   console.log("Email is Sent");
                   res.json({result : 1});
               }
           });

       }
    });
});

当用户点击此链接时,从 URL 获取令牌并对其进行解码。通过将其与服务器的当前日期进行比较来检查 expiry_date 链接的有效性

router.get('/verifyEmail/:token',function(req,res){
    var token = req.params.token;
    var data = jwt.decode(token,config.secret);
    console.log(new Date(data.expiry));
    console.log(new Date());
    if(new Date(data.expiry) > new Date()){
        User.findOne({ _id : data.user._id, name : data.user.name })
            .exec(function(err,user){
            if(err){
                console.log(err);
                res.json(err);
            }else if(!user){
                console.log("User not found");
                res.json({error : "User not found"});
            }else{
                console.log("User found");
                user.is_verified = true;
                user.save(function(update_err,update_data){
                    if(update_err){
                        console.log(update_err);
                        res.json(update_err);
                    }else{
                        console.log("Email is verified of user "+update_data._id);
                        res.json({result : 1});
                    }
                });
            }
        });
    }else{
        console.log("Link is expired");
        res.json({error : "Link is expired"});
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从用户电子邮件创建哈希/令牌以进行电子邮件验证 的相关文章

随机推荐

  • 数据更新后 Flutter listview 不更新

    我在 BottomSheet 中有一个 ListView 它是使用元素数组构建的 目前我有一项 空 然后 clear 在异步数据库调用后编辑并填充 变量更新是正确的 我尝试使用setState 但 ListView 根本没有更新 我需要关闭
  • 从 Kubernetes 日志中提取行

    我是 kubernetes 的新手 并且仍在尝试从几行中提取日志并写入它 如果有人可以帮助我应该执行哪些命令 如果 pod 名为 bino 并且我想提取与错误无法访问网站相对应的行 然后将它们写入某个位置 例如 John Doe bino
  • 签名时发生错误:找不到 SignTool.exe

    当我尝试更新我正在制作的项目时 我第一次看到错误 签名时发生错误 找不到 SignTool exe 我以前从未见过这个 所以我查了一下 SignTool exe 是为 ClickOnce 部署签署我的项目的东西 我还读到它是 Windows
  • 远程设备面板发生了什么变化?

    我正在运行 Chrome 80 在准备移动调试时 我观察到以下情况 该面板已迁移到其自己的选项卡 并且其功能已更改 我检查了变更日志 https developers google com web updates 2020 01 devto
  • 什么是? python pyodbc 模块中的意思

    import pyodbc cursor execute INSERT INTO Testing Param Seed Number Cycle Name VALUES 0 CoupleIn 是什么意思 代码中的意思是 当我尝试替换 s 代
  • Windows 10(通用 Windows 应用程序)数据验证

    我试图弄清楚如何在UWP下进行数据验证 但根据我发现的情况 基本上还没有什么可以实现的 因此 我尝试实现我的自定义验证逻辑 我现在遇到的问题是 我在一个上显示错误信息TextBlock而不是直接在特定的TextBox其中包含数据错误 这就是
  • 如何在 Swift3 中取消 DispatchQueue.main.asyncAfter(deadline: time) ? [复制]

    这个问题在这里已经有答案了 描述 我当前正在使用以下代码来查看用户是否已停止在搜索栏中输入内容 我想在每次用户立即开始输入后取消它0 5秒 Code DispatchQueue main asyncAfter deadline now 0
  • 如何简化 MouseListener 以便我没有所有这些未使用的方法?

    下面我有以下代码 这样当有人单击 关闭 时 窗口就会关闭 下面是同一菜单栏上的另一个退出按钮 只是为了冗余 稍后会更改为其他按钮 但要点如下 我的问题是 有什么办法可以让这件事变得更简单吗 我的意思是每个菜单都有四种未使用的方法 而且我还需
  • 在 C 中一次读取一行

    C 语言中可以使用哪种方法从文件中一次读取一行 我正在使用fgets功能 但不起作用 它仅读取空格分隔的标记 该怎么办 使用以下程序从文件中逐行获取 include
  • htaccess 在包含 HTTP 451 参数时“中断”

    对于我的网页 我有一个 htaccess文档看起来像这样
  • Python:读取临时文件时返回空字符串

    我需要从字符串创建一个文件 以便可以将其用作 Django 中电子邮件的附件 经过一番谷歌搜索后 我发现了带有 TemporaryFile 的临时文件模块 但它没有按我的预期工作 以下代码返回一个空字符串 gt gt gt f tempfi
  • 我如何将数据传递到我的 SQLite 数据库中

    你好 我对编程很陌生 我最近启动了一个 IONIC 应用程序 然而我被卡住了 我想做一些类似电话簿的东西 你可以在其中获取随机的 JSON 联系人并将它们保存到你的 sqlite 数据库中 我懂了 import Storage from i
  • 如何列出包括点文件但不包括 .和 ..?

    如何得到Dir 包括点文件 例如 gitignore 但不是 and 即 有没有更好的方法可以做到 ls A split n 也许与Dir 以下解决方案很接近 但都包括 Dir glob File FNM DOTMATCH Dir 因此 以
  • 这些在 jQuery 选择器中转义方括号的不同方法有什么区别

    有什么不同在这些不同的方法之间转义 jQuery 选择器中的方括号 有正确或错误的方法 还是这两种方法都正确 我读过不同的答案 包括this https stackoverflow com questions 1466103 jquery
  • 我想知道为什么我的playerIMG无法在pygame中加载

    下面是我的代码 这是我的第一个 pygame 项目 任何帮助将不胜感激 我认为这与 def 玩家 玩家 玩家 pygame display update 代码块 尽管当我使用它时 有时它甚至不会显示我的背景对象 而只显示屏幕填充黑色 imp
  • CSS:Em 舍入误差

    最近 我重写了我正在制作的网站的 CSS 文件 并尝试使用 em 而不是 px 使大多数元素和字体的大小动态化 尺寸可以工作 有点 但至少有一个问题 当使用 em 单位作为盒子的边距 边距 0 25em 时 在 Firefox 中 我在顶部
  • 从 iPhone 模拟器获取图像

    我刚刚创建了一个图像并将其保存在 iPhone 模拟器手机库中 我想查看此图像 不是来自照片库 以从文档资源查看其属性 但我无法访问照片库的内容 Thanks Pankaj 对于 Xcode 6 模拟器图像文件现在位于 Library De
  • 是否可以从 Java 代码调用 Ant 或 NSIS 脚本?

    是否可以在运行时从 Java 代码以编程方式调用 Ant 或 NSIS 脚本 如果是这样 怎么办 You can从 Java 代码调用 ant 脚本 See 本文 http ant apache org manual running htm
  • 如何在调试字符串的函数中获取函数名称?

    我想在每次调用时输出函数名称 我可以轻松复制并粘贴函数名称 但是我想知道是否有快捷方式可以为我完成这项工作 目前我正在做 SlideInfoHeader lynxThreeFile readSlideInfoHeader QDataStre
  • 从用户电子邮件创建哈希/令牌以进行电子邮件验证

    任何人都可以帮我解答如何从用户输入 电子邮件地址 创建安全令牌 或哈希 的问题 我想制作一个用于注册的电子邮件验证系统 用户使用电子邮件地址和密码注册 我想创建一个唯一的 URL 并将其发送给用户 因此出现了问题 我将这些 安全地 存储在临