【问题标题】:How can I send verfication codes to mobile numbers in node.js? (Like nodemailer, but for SMS)node.js如何向手机号码发送验证码? (类似于 nodemailer,但用于 SMS)
【发布时间】:2013-02-09 12:24:41
【问题描述】:

我已使用nodemailer 为我的项目向用户发送确认电子邮件。它工作正常。

现在我想从 node.js 向手机号码发送验证码,但我不知道该怎么做。

是否有任何模块可以向手机号码发送验证码,例如 nodemailer 使用电子邮件地址?或者如果没有,我自己怎么做?

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

【问题讨论】:

标签: javascript node.js sms-gateway


【解决方案1】:

大多数运营商都提供了一个 SMS 网关,您可以向该网关发送电子邮件并使其以 SMS 的形式到达。如果您想要一种适用于当前 nodemailer 实现的免费 SMS 发送方式,这可能是您的最佳选择。否则,您可能需要搜索可以集成的付费 SMS 服务。

这里是 SMS 网关列表:http://en.wikipedia.org/wiki/List_of_SMS_gateways

从链接的维基百科页面: 例如,要发送到通常在美国表示为 987-555-0100 的号码,可以发送电子邮件至 9875550100@SMS-gateway。

【讨论】:

  • 谢谢。但是如何使用该 nodemailer 向手机号码发送短信。
  • 来自链接的 Wikipedia 页面:例如,要发送到通常在美国表示为 987-555-0100 的号码,可以发送电子邮件至 9875550100@SMS-gateway。
  • nodemailer.createTransport("SMTP",{ service: "Gmail", auth: { user: "xxxx@gmail.com", pass: "xxxxxxxx" } });
  • mailOptions = { from: "Fred Foo ✔ ", // 发件人地址至:"number@aircel.co.in", // 收件人列表主题:" Hello ✔", // 主题行文本: "Hello world ✔", // 纯文本正文 html: "Hello world ✔" // html body } 我试过这个..但我无法收到那个味精...
  • 我不确定。不久前,我为一些美国运营商使用了 SMS 网关,它确实有效。如果这种免费方法不适合您,您可能需要搜索一些 SMS API 提供商。不过,他们通常收取较低的费用。
【解决方案2】:

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);
});

【讨论】:

  • 这只适用于印度!世界其他地方呢!
【解决方案3】:

为确保无论用户的位置和网络如何,您都可以通过移动设备接触到用户,您可能需要查看付费服务,例如Nexmo(我的工作人员)或Twilio

使用这些服务,您可以构建自己的验证(2FA - 双因素身份验证)工作流程:

  1. 用户在表单中输入他们的电话号码并提交到您的应用程序
  2. 您的应用收到电话号码
  3. 您向用户发送带有验证码的短信
  4. 用户收到授权码
  5. 用户在表单中输入验证码并提交到您的应用
  6. 您的应用会收到验证码,并根据电话号码检查该验证码(可能使用当前会话电话号码)
  7. 如果验证码是您所期望的,则用户已通过验证

或者您可以使用他们的 2FA 身份验证产品(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);
  }
});

【讨论】:

    【解决方案4】:

    您可以使用MSG 91 服务。它还提供OTP验证服务。

    【讨论】:

    • 如何与nodejs一起使用?
    【解决方案5】:

    从节点 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) 
    

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

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

    【讨论】:

      【解决方案6】:

      对于测试,您应该使用此 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);
      });

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多