【Vue后台管理二】vue-admin-template 對接后端API JWT認證


初始化對接端台API

上一篇了完成了項目初始化,但是那個只是把 vue-admin-template 模版簡單的初始化了一下,新增了tagsview標簽快捷導航欄,其他的沒什么變化。

這一篇了就完成了和后端的Jwt token認證,登錄,退出,基本的table list接口數據請求。首先看看效果。
后台效果演示

其實看起來和第一篇的初始化效果差不多,唯一的區別是,第一篇初始化接口還是用的Mock接口, 而這一篇是對接的后台FastAPI接口。

接口文檔

首先看看,一共對接了幾個接口, 接口格式等。
API文檔

修改Vue后台模版代碼

很多地方文檔和代碼結合着看,基本都能解決問題。
vue-element-admin使用文檔 https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/

接口請求地址修改

首先查看axios封裝,查看axios封裝的對象baseURL地址。

baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url

可以看到地址變量是 VUE_APP_BASE_API,如果有點經驗的話,項目文件很明顯, 有個.env.development的文件,點開里面就有VUE_APP_BASE_API直接修改為
VUE_APP_BASE_API = 'http://127.0.0.1:8010/api/admin/v1', 實在不知道,還可以全局搜索,這樣的配置文件一般全局唯一。

修改src/api/user 還有table接口請求地址, 然后查看請求方式是否和后台一致,請求參數在調用的地方查看。
如登錄修改后的

export function login(data) {
  return request({
    url: '/auth/login/access-token',
    method: 'post',
    data
  })
}

統一攔截設置 文檔和代碼都有說明,規定了后台傳入數據的格式為以下格式

{
      "code": 200,
      "data": "數據(可以多個字段嵌套)",
      "message": "提示信息",
}

由於我后台規定成功,code都為200, 所以在axios攔截器里面,把成功條件修改為200, 不為200的都攔截,然后彈出message作為提示。

JWT認證登錄

查看代碼src/views/login/index.vue
先理清登錄邏輯流程。先驗證數據,然后dispatch到Vuex里面異步發送請求。

  • 1 驗證數據
    驗證數據是導入的 import { validUsername } from '@/utils/validate'
    我后台規定, 使用的郵箱為賬號登錄的,所以更改驗證賬號,為驗證郵箱地址。
/**
 * @param {string} str
 * @returns {Boolean}
 */
// 這是之前驗證username 只能為 admin 和 editor
export function validUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}
/**
 * @param {string} str
 * @returns {Boolean}
 * */
// 這是新增的驗證郵箱的函數
export function validEmail(str) {
  const emailReg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
  return emailReg.test(str)
}

然后更改對應的驗證邏輯, 最后在去Vuex里面src/store/modules/user.js查看請求的邏輯。
請求成功后,把返回數據data.token保存到vuex 和 cookie里面各存了一次。

只是我登錄成功后的接口返回值,本來是返回的access_token字段的,后面改為token

{
  "code": 200,
  "message": "Success",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTUxNDIzMzQsInN1YiI6IjQifQ.3pdVG5eJIdNyNOdFiJG4GvQ9Y7bij73nW6UBBhL8b94",
    "token_type": "Bearer"
  }
}

然后我驗證接口的邏輯是 在headers里面添加 token字段驗證。
所以要去修改axios攔截器

// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent

    if (store.getters.token) {
      // let each request carry token
      // ['X-Token'] is a custom headers key
      // please modify it according to the actual situation
      config.headers['token'] = getToken()    // 這里的X-Token改為token 前后端協商
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

基本的登錄就完成了。

請求用戶信息

登錄完之后,就看到發送了請求用戶信息.
其實邏輯寫在這里在路由攔截 src/permission.js
查看如何保存的返回值, 去Vuex里面查看src/store/modules/user.js,
actions里面異步處理完請求后, 發送了請求, 獲取到用戶數據后,在commit 到 mutations 保存用戶數據

const { nickname, avatar } = data  // 這里我返回的是nickname 所以修改

commit('SET_NAME', nickname)
commit('SET_AVATAR', avatar)

個人主頁修改

// 個人中心
  {
    path: '/profile',   // 路由地址
    component: Layout,
    redirect: '/profile/index',
    hidden: true,    // 不顯示在側邊欄
    children: [
      {
        path: 'index',
        component: () => import('@/views/profile/index'),
        name: 'Profile',
        meta: { title: '個人中心', icon: 'user', noCache: true }
      }
    ]
  }
  • 3 修改頭部信息
    src/layout/components/Navbar
    刪掉其余的路由, 修改為
<router-link to="/">
       <el-dropdown-item>
            首頁
      </el-dropdown-item>
</router-link>
<router-link to="/profile">
      <el-dropdown-item>
        我的主頁
      </el-dropdown-item>
</router-link>
<el-dropdown-item divided @click.native="logout">
      <span style="display:block;">退出</span>
</el-dropdown-item>

測試Table list數據

那個修改邏輯和上面差不多

到這里差不多就完全初始化好了。

代碼GitHub地址

見個人網站 https://www.charmcode.cn/article/2020-07-11_Vue_Jwt_FastAPI


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM