如何在node.js中向手机发送验证码?(类似于nodemailer,但用于短信)

19

我在我的项目中使用nodemailer发送确认电子邮件给用户,目前工作正常。

现在我想从node.js向手机号码发送验证码,但是我不知道如何做到这一点。

是否有任何模块可以像nodemailer一样向移动电话号码发送验证码?如果没有,我该如何自己实现呢?

我正在使用node.js和mongodb、JavaScript和jQuery开发我的项目。


5
一个可能会得到良好结果的谷歌搜索查询是 node.js 发送短信 - Pekka
请查看Twilio网站http://twilio.com/或Tropo网站https://www.tropo.com/docs/scripting/overview。 - Connor Leech
6个回答

5

NodeJS软件包https://www.npmjs.com/package/springedge将帮助您轻松地发送短信。您可以按如下步骤进行安装:

npm install springedge

发送短信的代码示例:

// send sms 

var springedge = require('springedge');

var params = {
  'apikey': '', // API Key 
  'sender': 'SEDEMO', // Sender Name 
  'to': [
    '919019xxxxxxxx'  //Moblie Number 
  ],
  'message': 'test+message'
};

springedge.messages.send(params, 5000, function (err, response) {
  if (err) {
    return console.log(err);
  }
  console.log(response);
});

这只适用于印度!那其他国家呢! - Roshdy
谁会提供API密钥,获取API密钥的流程是什么? - Mohammed Shahed
您可以访问服务提供商的网站,例如 https://www.springedge.com。 - BSB

5
大多数运营商都提供SMS网关,您可以将电子邮件发送到该网关,并将其作为SMS接收。如果您想要一个免费的发送SMS的方式,并且希望它与您当前的nodemailer实现配合使用,那么这可能是您最好的选择。否则,您可能需要搜索可以集成的付费SMS服务。
以下是一些SMS网关列表:http://en.wikipedia.org/wiki/List_of_SMS_gateways 从链接的维基百科页面: 例如,要发送到一个通常表示为987-555-0100的美国号码,您将通过电子邮件发送到9875550100@SMS-gateway。

好的,但是如何使用nodemailer将短信发送到手机号码? - silvesterprabu
例如,要发送到通常在美国表示为987-555-0100的号码,可以通过电子邮件发送至9875550100@SMS网关。 - JWK
nodemailer.createTransport("SMTP",{ service: "Gmail", auth: { user: "xxxx@gmail.com", pass: "xxxxxxxx" } }); - silvesterprabu
邮件选项 = { 发件人: "Fred Foo ✔ foo@blurdybloop.com", // 发送者地址 收件人: "number@aircel.co.in", // 接收者列表 主题: "你好 ✔", // 主题行 文本: "你好世界 ✔", // 纯文本正文 HTML: "<b>你好世界 ✔</b>" // HTML正文 } 我尝试了这个...但我没有收到那条消息... - silvesterprabu
我不确定。我之前用过一些美国运营商的短信网关,它们可以正常工作。如果这种免费方法对你不起作用,你可能需要寻找一些短信API提供商。他们通常会收取低费用。 - JWK

3
为了确保您可以在用户的任何位置和网络下都能联系到他们的手机,您可能需要考虑使用付费服务,例如Nexmo(我曾就职于该公司)或Twilio
通过这些服务,您可以构建自己的验证(2FA - 双因素身份验证)流程:
  1. 用户在表单中输入其电话号码并提交给您的应用程序
  2. 您的应用程序接收到该电话号码
  3. 您向用户发送带有认证代码的短信
  4. 用户收到认证代码
  5. 用户在表单中输入认证代码并提交给您的应用程序
  6. 您的应用程序接收到认证代码,并将该认证代码与电话号码进行比对(可能使用当前会话电话号码)
  7. 如果认证代码是预期的,则用户已通过验证

您可以使用他们的两步验证产品(Nexmo - Verify 或 Twilio - Authy)来简化此工作流程。

使用 Nexmo 进行验证的代码如下:

发送验证请求

var Nexmo = require('nexmo');
var nexmo = new Nexmo({apiKey: API_KEY, apiSecret: API_SECRET});

var verifyRequestId = null; // use in the check process

nexmo.verify.request({number: TO_NUMBER, brand: APP_NAME}, function(err, result) {
  if(err) { console.error(err); }
  else {
    verifyRequestId = result. request_id;
  }
});

检查身份验证代码

nexmo.verify.control({request_id: verifyRequestId, cmd: 'cancel'}, function(err, result) {
  if(err) { console.error(err); }
  else {
    console.log(result);
  }
});

1
你可以使用MSG 91服务。它提供OTP验证服务。

如何在Node.js中使用? - rickster

1

在 Node.js 中向任意号码发送消息的最简单方法之一是使用一个名为 fast-two-sms 的库。

这个库很容易集成到你的项目中,而且价格也非常便宜,在注册后还提供免费信用额度。

以下是如何集成此库的方法:

首先安装它:

npm install fast-two-sms
or 
yarn add fast-two-sms

然后在js文件中:
const fast2sms = require('fast-two-sms')

var options = {authorization : YOUR_API_KEY , message : 'YOUR_MESSAGE_HERE' ,  numbers : ['9999999999','8888888888']} 
fast2sms.sendMessage(options) 

别忘了从他们的网站生成一个api密钥。

或者

您也可以使用Firebase身份验证。


-1

如果要进行测试,您应该使用此API https://www.fast2sms.com,但您也可以将其用作业务。在运行以下代码之前,请确保您已生成有效的API授权密钥,并且您应该免费注册。

现在将接收者的手机号码放置在批量消息中,您也可以将其用于验证和OTP目的。

在您想要实现SMS系统的项目中安装npm模块。

npm install unirest

GET方法的代码:

var unirest = require("unirest");

var req = unirest("GET", "https://www.fast2sms.com/dev/bulk");

req.query({
  "authorization": "YOUR_API_KEY",
  "sender_id": "FSTSMS",
  "message": "This is a test message",
  "language": "english",
  "route": "p",
  "numbers": "9999999999,8888888888,7777777777",
});

req.headers({
  "cache-control": "no-cache"
});

req.end(function (res) {
  if (res.error) throw new Error(res.error);

  console.log(res.body);
});

POST方法的代码:

var unirest = require("unirest");

var req = unirest("POST", "https://www.fast2sms.com/dev/bulk");

req.headers({
  "authorization": "YOUR_API_KEY"
});

req.form({
  "sender_id": "FSTSMS",
  "message": "This is a test message",
  "language": "english",
  "route": "p",
  "numbers": "9999999999,8888888888,7777777777",
});

req.end(function (res) {
  if (res.error) throw new Error(res.error);

  console.log(res.body);
});


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接