快速搭建Node.js(Express)用户注册、登录以及授权的方法

下面是详细讲解如何快速搭建Node.js(Express)用户注册、登录以及授权的方法的攻略,包含以下内容:

  1. 环境准备
  2. 安装Express和必要插件
  3. 用户注册与登录功能实现
  4. 授权功能实现

1. 环境准备

在开始搭建之前,需要准备好Node.js环境和编辑器,推荐使用最新版Node.js和Visual Studio Code编辑器。

2. 安装Express和必要插件

在项目根目录下,通过npm安装Express:

npm install --save express

安装数据库相关插件,比如mongodb:

npm install --save mongoose

安装密码加密插件bcrypt:

npm install --save bcrypt

安装JSON Web Token插件jsonwebtoken:

npm install --save jsonwebtoken

3. 用户注册与登录功能实现

用户模型设计

在models目录下创建用户模型user.js,并设计用户模型,代码如下:

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10;

const userSchema = new mongoose.Schema({
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

userSchema.pre('save', function (next) {
  const user = this;
  bcrypt.hash(user.password, saltRounds, (err, hash) => {
    if (err) {
      return next(err);
    }
    user.password = hash;
    next();
  });
});

module.exports = mongoose.model('User', userSchema);

用户注册与登录实现

在routes目录下创建用户注册和登录路由user.js,代码如下:

const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();

const User = require('../models/user');

// 用户注册
router.post('/register', (req, res) => {
  const { username, password } = req.body;
  const user = new User({ username, password });
  user.save((err) => {
    if (err) {
      return res.status(400).send('用户注册失败');
    }
    res.send('用户注册成功');
  });
});

// 用户登录
router.post('/login', (req, res) => {
  const { username, password } = req.body;
  User.findOne({ username }, (err, user) => {
    if (err || !user) {
      return res.status(400).send('用户名或密码错误');
    }
    user.comparePassword(password, (err, isMatch) => {
      if (err || !isMatch) {
        return res.status(400).send('用户名或密码错误');
      }
      const token = jwt.sign({ id: user._id }, 'jsonwebtoken_secret');
      res.cookie('token', token, { httpOnly: true });
      res.send('用户登录成功');
    });
  });
});

module.exports = router;

4. 授权功能实现

在middlewares目录下创建auth.js,实现授权功能,代码如下:

const jwt = require('jsonwebtoken');

module.exports = (req, res, next) => {
  const token = req.cookies.token;
  if (!token) {
    return res.status(401).send('认证失败,无法访问该接口');
  }
  try {
    const decoded = jwt.verify(token, 'jsonwebtoken_secret');
    req.user = decoded;
    next();
  } catch (err) {
    return res.status(401).send('认证失败,无法访问该接口');
  }
};

在应用中使用该中间件进行路由授权,代码如下:

const express = require('express');
const app = express();
const cookieParser = require('cookie-parser');

const auth = require('./middlewares/auth');
const user = require('./routes/user');

app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use('/user', user);  // 用户模块
app.use(auth);  // 授权

app.listen(8080, () => {
  console.log('server is running on port 8080');
});

示例1:用户注册

调用/user/register接口,传入参数{"username":"testuser","password":"testpassword"},成功返回"用户注册成功"。

示例2:用户登录

调用/user/login接口,传入参数{"username":"testuser","password":"testpassword"},成功返回"用户登录成功"并设置httpOnly的token Cookie。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速搭建Node.js(Express)用户注册、登录以及授权的方法 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • python开发之Docker入门安装部署教程

    Python开发之Docker入门安装部署教程 概述 Docker是一款开源的容器化平台,可以帮助开发者快速地构建、打包和部署应用程序。在Python开发领域中,Docker已经成为了重要的工具之一,通过Docker可以快速搭建Python开发环境,解决了开发环境不一致的问题。本文将介绍Docker的安装部署和使用方法。 Docker的安装 在Linux系统…

    人工智能概览 2023年5月25日
    00
  • Python垃圾回收机制三种实现方法

    下面是详细的文章攻略: Python垃圾回收机制三种实现方法 Python是一门高级语言,它提供了自动垃圾回收的功能,这个功能可以帮助开发者减少内存管理的难度,提升开发效率。Python垃圾回收机制的实现有三种方式,分别是: 引用计数机制 标记清除机制 分代收集机制 下面我将详细介绍这三种机制。 引用计数机制 Python中的引用计数机制是最简单的垃圾回收机…

    人工智能概论 2023年5月24日
    00
  • 在django admin中配置搜索域是一个外键时的处理方法

    在Django Admin中配置搜索域是一个外键时,需要考虑到外键关联的模型中的属性如何通过搜索框进行搜索。本文将详细介绍如何在Django Admin中对外键进行搜索,并给出示例说明。 步骤一:在Admin中定义一个Search Field 首先,我们需要在Admin的类中定义一个search_fields属性,来说明我们想要在哪些字段中搜索。 例如,对于…

    人工智能概览 2023年5月25日
    00
  • 哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程

    下面是详细讲解“哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程”的完整攻略: 安装LTP 下载LTP压缩包 在LTP官网下载LTP最新版本的压缩包,选择“Windows平台(64位)”版本的压缩包进行下载。 解压缩LTP 解压缩之后,得到一个名为“ltp-xxx”的文件夹,其中“xxx”为版本号。 安装Python LTP需要Pytho…

    人工智能概论 2023年5月25日
    00
  • pycharm debug功能实现跳到循环末尾的方法

    接下来我就详细地讲解一下 PyCharm 中 debug 功能实现跳到循环末尾的方法。 设置断点在 PyCharm 中,我们可以通过单击代码左侧的空白区域,来设置断点。 当程序运行到该处时,代码会停止执行,允许我们使用 debug 功能。 启动 debug 模式我们可以通过单击运行工具栏中的 debug 按钮,或者使用快捷键 Shift + F9 来启动 d…

    人工智能概览 2023年5月25日
    00
  • java+opencv实现人脸识别功能

    下面我将为你详细讲解“java+opencv实现人脸识别功能”的完整攻略。首先介绍一下OpenCV吧,OpenCV是一个跨平台的计算机视觉库,它可以实现一些图像处理和计算机视觉方面的功能。在Java中使用OpenCV可以通过JavaCV实现,而JavaCV是对OpenCV在Java中的封装。 步骤一:安装OpenCV 在使用JavaCV之前,需要先安装Ope…

    人工智能概论 2023年5月25日
    00
  • python 实现文件的递归拷贝实现代码

    下面是详细讲解如何使用 Python 实现文件递归拷贝的攻略: 1. 确定拷贝源和目标 在开始编写拷贝代码之前,首先需要明确需要拷贝哪些文件,以及拷贝到哪个目标路径。可以使用 Python 的 os 模块 来获取文件列表,并使用 shutil 模块 来完成文件拷贝的操作。具体代码如下: import os import shutil src_path = ‘…

    人工智能概论 2023年5月25日
    00
  • Python的Django框架中的URL配置与松耦合

    一、概述 在使用Python的Django框架开发网站时,URL配置是一个非常重要的环节。URL配置的合理编写可以使得网站的模块划分更加清晰,代码易于维护,可以有效降低代码耦合度,进而提高代码的可重用性,增强了网站的可扩展性。 二、URL配置分析 URL配置的主要作用是将请求的URL映射到视图函数上。在Django框架中,可以通过urls.py文件来实现UR…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部