如何生成随机数字代码以确认电子邮件

Posted

技术标签:

【中文标题】如何生成随机数字代码以确认电子邮件【英文标题】:How to generate a random number code to confirm an email 【发布时间】:2021-08-05 05:18:20 【问题描述】:

我是初学者,我在 Internet 上找不到通过电子邮件向刚刚注册或想要重置密码的用户发送 5 位数代码(例如)的教程。

我在 Node.js 下使用 Rest API 和 React.js 前端。因此,您必须注册用户并向他发送包含代码的电子邮件,当用户尝试连接而他的帐户在数据库中未显示为“活动”时,我们将要求他提供 5 位代码。

我找不到任何关于这种做法的教程来了解如何在没有安全漏洞的情况下以正确的方式进行操作。

感谢您的理解!

【问题讨论】:

【参考方案1】:

使用crypto生成随机数的最简单方法

const crypto = require("crypto");

// Asynchronous
crypto.randomInt(0, 1000000, (err, n) => 
  if (err) throw err;
  console.log(n);
);

编码愉快..!

【讨论】:

【参考方案2】:

使用原生的crypto 包会容易得多。

const crypto = require('crypto')
const randomEightDigits = crypto.randomBytes(6).toString('base64')

【讨论】:

【参考方案3】:

从一组给定的字符生成一个五位数的代码是一项非常容易的任务。摆脱安全问题要困难得多,这取决于您所需的安全级别。

如果您通过未加密的电子邮件发送代码,则安全性不是很高(中间人攻击)。如果您使用加密电子邮件 (PGP),则可以认为它是安全的。

从给定集合生成 5 个字符代码的代码:

const givenSet = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";

let code = "";
for(let i=0; i<5; i++) 
   let pos = Math.floor(Math.random()*givenSet.length);
   code += givenSet[pos];

【讨论】:

以上是关于如何生成随机数字代码以确认电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActionMailer 的电子邮件注册确认

我们将如何发送不同的电子邮件模板以重置密码并确认在 AWS cognito 中注册

ASP.NET Web API 2 - 用户注册电子邮件确认失败

如何获得 Paypal 付款以触发已经存在的确认电子邮件

从字符串生成 6 位数字(用于电子邮件验证)

在 for 循环中编译信息以发送电子邮件作为确认