国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

快速搭建Node.js(Express)用戶注冊、登錄以及授權的方法

2024-05-06 16:50:40
字體:
來源:轉載
供稿:網友

項目準備

  1. 建立一個文件夾,這里叫 EXPRESS-AUTH
  2. npm init -y

啟動服務

  1. 新建一個server.js 或者 app.js
  2. npm i express
  3. 開啟端口,啟動服務
// server.js// 引入 expressconst express = require('express')// 創建服務器應用程序const app = express()app.get('/user', async (req, res) => { res.send('hello node.js')})app.listen(3001, () => { console.log('http://localhost:3001')})

在命令行運行 nodemon ./server.js 命令啟動服務

注:nodemon 命令需要全局安裝 nodemon( npm install --global nodemon ), 在瀏覽器訪問/user時如下,則說明開啟成功

Node.js

實現簡單的 GET 請求接口

創建處理 get 請求的接口

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

在vscode商店中下載 REST Client

Node.js

新建一個 test.http 文件測試接口,點擊 Send Request 發送請求

 

// test.http@url=http://localhost:3001/api### get {{url}}/user

Node.js

如上圖,get 請求成功

操作 MongoDB 數據庫

連接數據庫

  1. 安裝 mongodb 數據庫
  2. 在需要啟動的盤符根目錄下新建 data/db 文件夾
  3. 在命令行對應的盤符下輸入 mongod 命令,即可開啟服務
  4. 有需要可以下載NoSQLBooster for MongoDB軟件

建立數據庫模型

  • npm i mongoose
  • 新建 model.js 操作數據庫
// 引入 mongoose const mongoose = require('mongoose')// 連接數據庫,自動新建 ExpressAuth 庫mongoose.connect('mongodb://localhost:27017/ExpressAuth', { useNewUrlParser: true, useCreateIndex: true})// 建立用戶表const UserSchema = new mongoose.Schema({ username: { type: String, unique: true }, password: { type: String, }})// 建立用戶數據庫模型const User = mongoose.model('User', userSchema)module.exports = { User }

簡單的 POST 請求

創建處理 POST 請求的接口

// server.jsapp.post('/api/register', async (req, res) => { console.log(req.body); res.send('ok')})app.use(express.json()) // 設置后可以用 req.body 獲取 POST 傳入 data

設置 /api/register

###POST {{url}}/registerContent-Type: application/json{ "username": "user1", "password": "123456"}

注冊用戶

// server.jsapp.post('/api/register', async (req, res) => { // console.log(req.body); const user = await User.create({ username: req.body.username, password: req.body.password }) res.send(user)})

數據庫里多了一條用戶數據:

Node.js

密碼 bcrypt 加密

  • npm i bcrypt
  • 在 model.js 中設置密碼入庫前加密,這里的 hashSync方法接受兩個參數,val 表示傳入的 password,10表示加密的等級,等級越高,所需轉化的時長越長

Node.js

用戶登錄密碼解密

在 server.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: '用戶名不存在' }) } // bcrypt.compareSync 解密匹配,返回 boolean 值 const isPasswordValid = require('bcrypt').compareSync( req.body.password, user.password ) if (!isPasswordValid) { return res.status(422).send({  message: '密碼無效' }) } res.send({ user })})

登錄添加 token

安裝 jsonwebtoken npm i jsonwebtoken
引入 jsonwebtoken,自定義密鑰

// 引入 jwtconst jwt = require('jsonwebtoken')// 解析 token 用的密鑰const SECRET = 'token_secret'

在登錄成功時創建 token

/* 生成 tokenjwt.sign() 接受兩個參數,一個是傳入的對象,一個是自定義的密鑰*/const token = jwt.sign({ id: String(user._id) }, SECRET)res.send({ user, token})

這樣我們在發送請求時,就能看到創建的 token

Node.js

解密 token獲取登錄用戶

先在 server.js 處理 token

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

發送請求,這里的請求頭是復制之前測試用的 token

### 個人信息
get {{url}}/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVjZDI5YjFlMTIwOGEzNDBjODRhNDcwMCIsImlhdCI6MTU1NzM2ODM5M30.hCavY5T6MEvMx9jNebInPAeCT5ge1qkxPEI6ETdKR2U

服務端返回如下圖,則說明解析成功

Node.js

配套完整代碼和注釋見 Github

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 封丘县| 巴里| 辰溪县| 千阳县| 木兰县| 韶山市| 铜山县| 吉木萨尔县| 长丰县| 永丰县| 凤山县| 资源县| 嫩江县| 广灵县| 右玉县| 外汇| 留坝县| 黄石市| 靖边县| 喀喇沁旗| 基隆市| 岑溪市| 镇巴县| 福海县| 靖安县| 安远县| 泰顺县| 高密市| 苍山县| 双桥区| 满城县| 榆社县| 渭南市| 汨罗市| 东平县| 紫阳县| 和田市| 万全县| 嘉祥县| 白城市| 石首市|