从零开始搭建群众权益平台(二)

简介: 从零开始搭建群众权益平台(二)

这篇文章我们要建立的群众权益维护平台需要提供用户注册、登录、提交和查看问题或建议的功能,并且支持电话短信登录。在这个过程中,我们需要存储用户的登录信息。

我们将使用Node.js和Express.js作为后端框架,MongoDB作为数据库,并且使用Twilio服务发送短信验证码来实现手机登录。这个过程涉及到前后端的编程,下面将详细解释如何实现。

后端编码

我们首先创建后端应用和相关的路由,首先需要创建一个新的Node.js应用,然后安装相关的库:

mkdir rights-platform
cd rights-platform
npm init -y
npm install express mongoose bcryptjs jsonwebtoken twilio cors

然后,我们创建一个新的Express应用,并且设置路由处理用户的注册和登录请求。以下是一个非常基本的例子:

// server.js
const express = require('express');
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const cors = require('cors');
const Twilio = require('twilio');
const app = express();
app.use(express.json());
app.use(cors());
// 连接到MongoDB数据库
mongoose.connect('mongodb://localhost:27017/rights-platform', { useNewUrlParser: true, useUnifiedTopology: true });
// 创建用户数据模型
const userSchema = new mongoose.Schema({
  username: String,
  password: String,
  phone: String
});
const User = mongoose.model('User', userSchema);
// 用户注册
app.post('/api/register', async (req, res) => {
  const hashedPassword = await bcrypt.hash(req.body.password, 10);
  const user = new User({
    username: req.body.username,
    password: hashedPassword,
    phone: req.body.phone
  });
  try {
    await user.save();
    res.send({ message: 'User registered' });
  } catch (error) {
    res.status(500).send({ message: 'Error registering user' });
  }
});
// 用户登录
app.post('/api/login', async (req, res) => {
  const user = await User.findOne({ username: req.body.username });
  if (!user || !await bcrypt.compare(req.body.password, user.password)) {
    return res.status(401).send({ message: 'Invalid username or password' });
  }
  const token = jwt.sign({ id: user.id }, 'secret');
  res.send({ token });
});
// 启动应用
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port}`));

这个代码涉及到了注册和登录的基本功能,包括了密码的哈希,JWT的生成等,但还没有实现手机验证码登录。我们在下一步中将添加手机验证码登录的功能。

我们将使用Twilio服务发送短信验证码

在开始之前,您需要在Twilio网站注册一个账户,并获取一个Twilio phone number、Account SID和Auth Token。将这些信息存储在环境变量中,或者直接在代码中使用(不推荐)。

我们也需要添加一个新的数据模型来存储验证码,以便验证用户输入的验证码是否正确。我们同样使用mongoose库来创建数据模型。

以下是如何添加手机验证码登录的代码:

// server.js
// 在文件顶部引入相关库
const twilio = require('twilio');
// 创建Twilio客户端
const twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
// 创建验证码数据模型
const verificationSchema = new mongoose.Schema({
  phone: String,
  code: String,
  createdAt: { type: Date, expires: '10m', default: Date.now }
});
const Verification = mongoose.model('Verification', verificationSchema);
// 发送验证码
app.post('/api/send-verification', async (req, res) => {
  const verificationCode = Math.floor(Math.random() * 1000000).toString().padStart(6, '0');
  const verification = new Verification({
    phone: req.body.phone,
    code: verificationCode
  });
  try {
    await verification.save();
    await twilioClient.messages.create({
      body: `Your verification code is ${verificationCode}`,
      from: process.env.TWILIO_PHONE_NUMBER,
      to: req.body.phone
    });
    res.send({ message: 'Verification code sent' });
  } catch (error) {
    res.status(500).send({ message: 'Error sending verification code' });
  }
});
// 使用验证码登录
app.post('/api/login-with-phone', async (req, res) => {
  const verification = await Verification.findOne({ phone: req.body.phone, code: req.body.code });
  if (!verification) {
    return res.status(401).send({ message: 'Invalid phone number or verification code' });
  }
  const user = await User.findOne({ phone: req.body.phone });
  if (!user) {
    return res.status(401).send({ message: 'User not found' });
  }
  const token = jwt.sign({ id: user.id }, 'secret');
  res.send({ token });
});

此代码添加了发送验证码和使用验证码登录的功能。验证码在创建10分钟后会自动从数据库中删除,以防止其被重新使用。

请注意,这只是一个基本的实现,还有很多细节需要处理,例如错误处理、安全性考虑等。在实际应用中,可能还需要添加更多的功能,例如用户管理、权限控制等。

后续我们将实现这些功能,请关注我们专栏。

目录
相关文章
|
前端开发 API 数据处理
从零开始搭建群众权益平台(四)
从零开始搭建群众权益平台(四)
56 0
|
存储 算法 数据安全/隐私保护
从零开始搭建群众权益平台(三)
从零开始搭建群众权益平台(三)
49 0
|
数据采集 前端开发 JavaScript
从零开始搭建群众权益平台(七)
从零开始搭建群众权益平台(七)
49 0
|
搜索推荐 SEO
从零开始搭建群众权益平台(十一)
从零开始搭建群众权益平台(十一)
35 0
|
移动开发 前端开发 JavaScript
从零开始搭建群众权益平台(六)
从零开始搭建群众权益平台(六)
49 0
|
前端开发 JavaScript API
从零开始搭建群众权益平台(五)
从零开始搭建群众权益平台(五)
40 0
|
6月前
|
存储 监控 供应链
一文讲透阿里商旅账单系统架构设计实践
阿里商旅作为飞猪旅行旗下面向企业客户的数字化差旅解决方案产品,依托飞猪旅行机票、酒店供应链为企业客户提供一站式的机票、酒店、火车票、用车等预订管控及结算票据服务。阿里商旅不仅是集团欢行的供应商,而且近几年在商业化差旅市场上崭露头角,服务了2万+中大型客户,43万+小微企业。
|
JavaScript 前端开发 数据挖掘
从零开始搭建群众权益平台(九)
从零开始搭建群众权益平台(九)
52 0
|
监控 JavaScript 应用服务中间件
从零开始搭建群众权益平台(八)
从零开始搭建群众权益平台(八)
63 0
|
搜索推荐 定位技术 网络安全
从零开始搭建群众权益平台(十)
从零开始搭建群众权益平台(十)
51 0