快速使用node+express+mongodb实现登录验证接口

电脑环境安装:node、npm、mongodb

项目环境安装:express、mongoose

npm install express --save
npm install mongoose --save

什么是express ?

Express 是 基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

Express 是最流行的 Node 框架,是许多其它流行 Node 框架 的底层库。

什么是mongoose ?

Mongoose是Nodejs的一个模块,这个模块可以操作MongoDB模块对数据库的操作

Mongooose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进一步的优化封装,并提供了更多的功能。

Mongoose,是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB的nodejs驱动,也是目前Node.js操作 MongoDB的首选库。

什么是JWT?

JWT 全称 JSON Web Token,是代替传统 session 认证的解决方案。其原理是服务端生成一个包含用户唯一标识的 JSON 对象,颁发给客户端。客户端请求需要权限的接口时,只要把这个 JSON 再原样发回给服务端,服务端通过解析就可识别用户。

JSON 对象通常是这样子:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNGY3MWZhMTU2MDRiZjdkNmVlOTc2NSIsInVzZXJuYW1lIjoieXl5IiwiaWF0IjoxNjY2MjMyMTM0fQ.NcnpkbY6JweWvJ-eDZS0X5lPDl1QI5FKBAeWpgf6CKQ

这个 JSON 对象通过点 . 分成三段,包含了请求头(加密算法)、负载信息(如 userId,过期时间),还有通过服务端密钥生成的签名来保证不被篡改。这种机制使服务端不再需要存储 Token,因此是非常轻量的用户认证方案。并且对于微服务这种需要不用服务间公用 Token 的跨域认证,JWT 是目前的首选。

什么是express-jwt?

express-jwt 是专用于 express 框架下解析 JWT 的中间件。它使用非常简单,而且会自动把 JWT 的 payload 部分赋值于 req.user,方便逻辑部分调用。

项目准备

新建一个文件夹,使用 npm init -y,对项目进行初始化操作,对项目依赖包进行管理。

-y的含义:yes的意思,在 init 的时候省去了敲回车的步骤,直接生成默认的 package.json

使用以下命令,安装本项目所需要的依赖包文件

npm install express --save
npm install mongoose --save

开启服务

1、新建一个 app.js 文件

const express = require('express');
const app = express();

app.get('/api/user', async (req, res) => {
    res.send('hello node.js')
})

app.listen(3000, () => {
    console.log('http://localhost:3000');
})

2、在命令行输入 node app.js,开启后台服务

3、在浏览器访问地址,http://localhost:3000/api/user,出现下图消息,代表后台服务开启成功。

实现简单的GET请求接口

app.get('/api/user', async (req, res) => {
    res.send('hello node.js')
})

实现简单的POST请求接口

app.use(express.json()) // 设置后可以用 req.body 获取 POST 传入 data

app.post('/api/register', async (req, res) => {
    console.log(req.body);
    res.send('ok')
})

连接MongoDB数据库

1、在本电脑上,安装 mongodb 数据库,并开启服务

2、在根目录下新建 data/db.js 文件

// 引入 mongoose 
const mongoose = require('mongoose')

// 连接数据库,自动新建 express_admin 库
mongoose.connect('mongodb://localhost:27017/express_admin', {
    useNewUrlParser: true,
    useUnifiedTopology: true
})

// 建立用户表
const UserSchema = new mongoose.Schema({
  username: {
    type: String,
    unique: true
  },
  password: {
    type: String,
  }
})

// 建立用户数据库模型
const User = mongoose.model('User', UserSchema)

module.exports = { User }

const conn = mongoose.connection;

conn.on("error",error=>{
    console.log("数据库连接失败:" + error);
})
conn.on("open",()=>{
    console.log("数据库连接成功");
})

创建一个post请求,注册一个用户

const express = require('express');
const app = express();
const { User } = require('./data/db');

app.use(express.json()) // 设置后可以用 req.body 获取 POST 传入 data

// server.js
app.post('/api/register', async (req, res) => {
    User.create({
      username: req.body.username,
      password: req.body.password
    })
    res.send('ok')
})

app.listen(3000, () => {
    console.log('http://localhost:3000');
})

模拟用户发起POST请求,注册一个用户

@url=http://localhost:3000/api

POST {{url}}/register
Content-Type: application/json

{
  "username": "llb",
  "password": "123456"
}

数据库会自动创建好,并多了一条用户数据:

 用户登录密码加密

在app.js中添加一个/login的post请求

app.post('/api/login', async (req, res) => {
    const user = await User.findOne({
        username: req.body.username
    })
    
    if(!user) {
        return res.status(422).send({
            message: '用户名不存在'
        })
    }
    // compareSync 解密匹配,返回 boolean 值
    const isPasswordValid = bcrypt.compareSync(
        req.body.password,
        user.password
    )

    if(!isPasswordValid) {
        return res.status(422).send({
            message: '密码不正确'
        })
    }

    res.send({
        user
    })
})

登录jwt认证 token

1.安装jsonwebtoken依赖包

npm install jsonwebtoken --save

2.引入 jsonwebtoken,自定义密钥

const jwt = require('jsonwebtoken')
// 解析token用的密钥
const SECRET = 'token_secret'

3.在登录成功时,创建token

// jwt.sign() 接收两个参数,一个是传入的对象,一个是自定义的密钥
    const token = jwt.sign({ id: String(user._id)}, SECRET)
    res.send({
        user,
        token
    })

4.发送请求测试时,可以看到创建好的token

解密token获取登录用户信息

1.在app.js中添加/profile的get请求

app.get('/api/profile', async (req, res) => {
    const raw = String(req.headers.authorization.split(' ').pop())
    // 解密token获取对应的id
    const { id } = jwt.verify(raw, SECRET)
    const result = await User.findById(id)
    res.send(result)
})

2.模拟"yyy"用户发起一个/profile的get请求

@url=http://localhost:3000/api

get {{url}}/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzNGY3MWZhMTU2MDRiZjdkNmVlOTc2NSIsImlhdCI6MTY2NjE2OTUwMH0.1U0rSN0ARzVvdBgRLbFWnmUXOLgkGOjBoyoN76owPgk

3.发起请求测试时,可以看到yyy用户的信息,说明解密成功

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您使用的是Linux操作系统,可以按照以下步骤在系统启动时启动MongoDB: 1. 打开终端并输入以下命令来编辑MongoDB的启动脚本: ``` sudo nano /etc/init.d/mongod ``` 2. 将以下内容复制并粘贴到文件中: ``` #!/bin/sh # chkconfig: 345 99 25 # description: MongoDB init script # processname: mongod # Source function library . /etc/init.d/functions # Environment variables MONGOD=/usr/bin/mongod CONF_FILE=/etc/mongod.conf PID_FILE=/var/run/mongodb/mongod.pid MONGOD_USER=mongodb MONGOD_GROUP=mongodb # Check if mongo is installed if [ ! -x "$MONGOD" ] ; then echo "MongoDB is not installed. Please install it and try again." exit 1 fi # Check if the configuration file is present if [ ! -f "$CONF_FILE" ] ; then echo "MongoDB configuration file not found at $CONF_FILE." exit 1 fi # Check if the PID file directory exists if [ ! -d "`dirname $PID_FILE`" ] ; then mkdir -p `dirname $PID_FILE` chown $MONGOD_USER:$MONGOD_GROUP `dirname $PID_FILE` fi # Start MongoDB start() { echo -n "Starting MongoDB... " daemon --user $MONGOD_USER --check $MONGOD -- $MONGOD --config $CONF_FILE --pidfilepath $PID_FILE >/dev/null RETVAL=$? echo "Done." } # Stop MongoDB stop() { echo -n "Stopping MongoDB... " killproc -p $PID_FILE $MONGOD RETVAL=$? echo "Done." } # Restart MongoDB restart() { stop start } # Check MongoDB status status() { status $MONGOD } # Main program case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit $RETVAL ``` 3. 按下Ctrl + X,然后按下Y来保存文件。 4. 接下来,您需要将启动脚本添加到系统服务中。运行以下命令: ``` sudo chkconfig --add mongod ``` 5. 然后,使用以下命令将MongoDB添加到系统启动服务中: ``` sudo chkconfig mongod on ``` 6. 最后,使用以下命令启动MongoDB服务: ``` sudo service mongod start ``` 现在,MongoDB将在系统启动时自动启动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值