自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用戶登錄與 Token 管理全流程(JWT 實戰(zhàn))

開發(fā)
在前后端分離項目中,用戶登錄常通過后端頒發(fā)的 JWT Token 實現(xiàn)身份校驗,配合本地緩存與請求頭傳遞,完成安全且高效的用戶系統(tǒng)。

在前后端分離項目中,用戶登錄常通過后端頒發(fā)的 JWT Token 實現(xiàn)身份校驗,配合本地緩存與請求頭傳遞,完成安全且高效的用戶系統(tǒng)。

通過前面的基礎(chǔ)學(xué)習(xí),本文將帶你實現(xiàn):

  • 登錄接口調(diào)用與 Token 獲取
  • Token 本地緩存與讀取
  • 請求時自動攜帶 Authorization
  • Token 失效統(tǒng)一處理

登錄流程 & 獲取 Token

后端登錄接口通常返回一個 access_token:

示例接口:

POST /api/login
請求:{ username, password }
響應(yīng):{ access_token, user_info }

頁面調(diào)用(如:pages/login.vue):

import { postRequest } from'@/utils/request.js'
import { set } from'@/utils/storage.js'

constlogin = async () => {
const res = awaitpostRequest('/login', {
    username: userName.value,
    password: password.value
  })

// 存儲 Token 和用戶信息
set('token', res.access_token)
set('userInfo', res.user_info)

  uni.showToast({ title: '登錄成功' })
  uni.switchTab({ url: '/pages/home/index' })  // 跳轉(zhuǎn)首頁
}

本地 Token 緩存

utils/storage.js 緩存工具封裝:

export constset = (key, value) => {
  uni.setStorageSync(key, value)
}

exportconstget = (key) => {
return uni.getStorageSync(key)
}

exportconstremove = (key) => {
  uni.removeStorageSync(key)
}
  • 登錄后使用 set('token', access_token) 存儲
  • 請求時使用 get('token') 獲取
  • 退出登錄時調(diào)用 remove('token')

自動攜帶 Authorization 請求頭

我們在通用請求模塊中加攔截處理:

utils/request.js:

import config from'@/config/index.js'
import { get, remove } from'./storage.js'

constrequest = (options = {}) => {
const token = get('token') || ''

returnnewPromise((resolve, reject) => {
    uni.request({
      url: config.baseURL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${token}`,
        ...(options.header || {})
      },
      success: (res) => {
        const { statusCode, data } = res

        // Token 失效統(tǒng)一處理
        if (statusCode === 401) {
          uni.showToast({ title: '登錄已過期,請重新登錄', icon: 'none' })
          remove('token')
          setTimeout(() => {
            uni.reLaunch({ url: '/pages/login/index' })
          }, 1000)
          returnreject(data)
        }

        if (statusCode === 200) {
          resolve(data)
        } else {
          uni.showToast({ title: data.message || '請求失敗', icon: 'none' })
          reject(data)
        }
      },
      fail: (err) => {
        uni.showToast({ title: '網(wǎng)絡(luò)異常', icon: 'none' })
        reject(err)
      }
    })
  })
}
  • 自動注入 Authorization: Bearer token ,這個Bearer+空格按自己的后端實際需求添加
  • Token 失效時自動跳轉(zhuǎn)登錄頁

退出登錄處理

import { remove } from '@/utils/storage.js'

const logout = () => {
  remove('token')
  remove('userInfo')
  uni.reLaunch({ url: '/pages/login/index' })
}

可以放在 “我的頁面” 里做登出按鈕邏輯。

總結(jié)一張圖

[ 登錄頁 ]
    ↓
[ 輸入賬號密碼 ]
    ↓
[ 請求登錄接口 ]
    ↓
[ 拿到 token + 存儲 ]
    ↓
[ 通用請求模塊 => 自動帶 token ]
    ↓
[ 401 失效自動跳登錄 ]
責(zé)任編輯:趙寧寧 來源: Ssoul肥魚
相關(guān)推薦

2025-01-15 09:21:01

2024-12-30 00:15:48

ASP.NET安全

2025-04-16 08:00:00

FastAPIJWT用戶認證

2025-01-02 09:02:09

Go項目Token

2021-12-30 08:13:00

JWT登錄令牌

2011-08-02 18:12:29

AD

2022-01-18 08:12:34

JWT鏈路微服務(wù)

2021-08-09 08:53:30

HTTP狀態(tài)化協(xié)議

2024-09-26 10:42:20

2021-09-01 10:15:15

前端cookiesession

2020-10-20 07:49:00

JWT(JSON We

2020-10-27 09:00:00

NodeJS實現(xiàn)JWT

2021-03-23 10:45:23

CookieSession前端

2023-12-08 12:12:21

2021-08-02 12:50:45

sessiontokenJava

2021-03-08 09:56:24

存儲分布式Session

2012-12-13 11:03:43

IBMdW

2024-07-15 09:58:03

OpenRestyNginx日志

2025-02-26 09:03:24

2021-09-28 06:57:22

JWT過期生效
點贊
收藏

51CTO技術(shù)棧公眾號