最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue Element前端應用開發(fā)之整合ABP框架的前端登錄

 更新時間:2021年05月13日 09:58:56   作者:伍華聰  
VUE+Element 前端是一個純粹的前端處理,前面介紹了很多都是Vue+Element開發(fā)的基礎,從本章隨筆開始,就需要進入深水區(qū)了,需要結(jié)合ABP框架使用

概述

ABP框架作為后端,是一個非常不錯的技術方向,但是前端再使用Asp.NET 進行開發(fā)的話,雖然會快捷一點,不過可能顯得有點累贅了,因此BS的前端選項采用Vue+Element來做管理(后續(xù)可能會視情況加入Vue+AntDesign),CS前端我已經(jīng)完成了使用Winform+ABP的模式了。本篇隨筆主要介紹Vue+Element+ABP的整合方式,先從登錄開始介紹。

1、ABP開發(fā)框架的回顧

ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程序框架。ABP不僅僅是一個框架,它還提供了一個最徍實踐的基于領域驅(qū)動設計(DDD)的體系結(jié)構(gòu)模型。

啟動Host的項目,我們可以看到Swagger的管理界面如下所示。

我們登錄獲得用戶訪問令牌token后,測試字典類型或者字典數(shù)據(jù)的接口,才能返回響應的數(shù)據(jù)。

我根據(jù)ABP后端項目之間的關系,整理了一個架構(gòu)的圖形。

應用服務層是整個ABP框架的靈魂所在,對內(nèi)協(xié)同倉儲對象實現(xiàn)數(shù)據(jù)的處理,對外配合Web.Core、Web.Host項目提供Web API的服務,而Web.Core、Web.Host項目幾乎不需要進行修改,因此應用服務層就是一個非常關鍵的部分,需要考慮對用戶登錄的驗證、接口權限的認證、以及對審計日志的記錄處理,以及異常的跟蹤和傳遞,基本上應用服務層就是一個大內(nèi)總管的角色,重要性不言而喻。

對于通過Winform方式展示界面,以Web API方式和后端的ABP的Web API服務進行數(shù)據(jù)交互,是我們之前已經(jīng)完成的項目,項目界面如下所示。

主體框架界面采用的是基于菜單的動態(tài)生成,以及多文檔的界面布局,具有非常好的美觀性和易用性。

左側(cè)的功能樹列表和頂部的菜單模塊,可以根據(jù)角色擁有的權限進行動態(tài)構(gòu)建,不同的角色具有不同的菜單功能點,如下是測試用戶登錄后具有的界面。

2、Vue+Element整合ABP框架的前端登錄處理

之前我們開發(fā)完成的Vue+Element的前端項目,默認已經(jīng)具有登錄系統(tǒng)的功能,不過登錄是采用mock方式進行驗證并處理的,本篇隨筆介紹是基于實際的ABP項目進行用戶身份的登錄處理,這個也是開發(fā)其他接口展示數(shù)據(jù)的開始步驟,必須通過真實的用戶身份登錄后臺,獲得對應的token令牌,才能進行下一步接口的開發(fā)工作。

例如對應登錄界面上,界面效果如下所示。

在用戶登錄界面中,我們處理用戶登錄邏輯代碼如下所示。

// 處理登錄事件
    handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true
          this.$store
            .dispatch('user/login', this.loginForm)
            .then(() => {
              this.$router.push({ path: this.redirect || '/' })
              this.loading = false
            })
            .catch(() => {
              this.loading = false
            })
        } else {
          console.log('error submit!!')
          return false
        }
      })
    }

這里主要就是調(diào)用Store模塊里面的用戶Action處理操作。

例如對于用戶store模塊里面的登錄Action函數(shù)如下所示。

const actions = {
  // user login
  login({ commit }, userInfo) {
    const { username, password } = userInfo
    return new Promise((resolve, reject) => {
      login({ username: username.trim(), password: password }).then(response => {
        const { result } = response // 獲取返回對象的 result
        var token = result.accessToken
        var userId = result.userId

        // 記錄令牌和用戶Id
        commit('SET_TOKEN', token)
        commit('SET_USERID', userId)

        // 存儲cookie
        setToken(token)
        setUserId(userId)
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },

而其中l(wèi)ogin({ username: username.trim(), password: password }) 操作,是通過API封裝處理的調(diào)用,使用前在Store模塊中先引入API模塊,如下所示。

import { login, logout, getInfo } from '@/api/user'

而其中 API模塊代碼如下所示。

export function login(data) {
  return request({
    url: '/abp/TokenAuth/Authenticate',
    method: 'post',
    data: {
      UsernameOrEmailAddress: data.username,
      password: data.password
    }
  })
}

這里我們用了一個/abp的前綴,用來給WebProxy的處理,實現(xiàn)地址的轉(zhuǎn)義,從而可以實現(xiàn)跨站的處理,讓前端調(diào)用外部地址就和調(diào)用本地地址一樣,無縫對接。

我們來看看vue.config.js里面對于這個代理的轉(zhuǎn)義操作代碼。

而http://localhost:21021/api 地址指向的項目,是我們本地使用ABP開發(fā)的一個后端Web API項目,我們可以通過地址http://localhost:21021/swagger/index.html進行接口的查看。

我們打開獲取授權令牌的Authenticate接口,查看它的接口定義內(nèi)容

通過標注的1,2,我們可以看到這個接口的輸入?yún)?shù)和輸出JSON信息,從而為我們封裝Web API的調(diào)用提供很好的參考。

ABP框架統(tǒng)一返回的結(jié)果是result,這個result里面才是返回對應的接口內(nèi)容,如上面的輸出JSON信息里面的定義。

所以在登陸返回結(jié)果后,我們要返回它的result對象,然后在進行數(shù)據(jù)的處理。

const { result } = response // 獲取返回對象的 result

然后通過result來訪問其他屬性即可。

var token = result.accessToken // 用戶令牌
var userId = result.userId // 用戶id

用戶登錄成功后,并獲取到對應的數(shù)據(jù),我們就可以把必要的數(shù)據(jù),如token和userid存儲在State和Cookie里面了。

// 修改State對象,記錄令牌和用戶Id
commit('SET_TOKEN', token)
commit('SET_USERID', userId)

// 存儲cookie
setToken(token)
setUserId(userId)

有了這些信息,我們就可以進一步獲取用戶的相關信息,如用戶名稱、介紹,包含角色列表和權限列表等內(nèi)容了。

例如對應用戶信息獲取接口的ABP后端地址是 http://localhost:21021//api/services/app/User/Get

那么我們前端就需要在API模塊里面構(gòu)建它的訪問地址(/abp/services/app/User/Get)和接口處理了。

export function getInfo(id) {
  return request({
    url: '/abp/services/app/User/Get',
    method: 'get',
    params: {
      id
    }
  })
}

如上所示,在Store模塊里引入API模塊,如下所示。

import { login, logout, getInfo } from '@/api/user'

然后在Store模塊中封裝一個Action用來處理用戶信息的獲取的。

// 獲取用戶信息
  getInfo({ commit, state }) {
    return new Promise((resolve, reject) => {
      getInfo(state.userid).then(response => {
        const { result } = response
        console.log(result) // 輸出測試

        if (!result) {
          reject('Verification failed, please Login again.')
        }

        const { roles, roleNames, name, fullName } = result

        // 角色非空提醒處理
        if (!roles || roles.length <= 0) {
          reject('getInfo: roles must be a non-null array!')
        }

        commit('SET_ROLES', { roles, roleNames })
        commit('SET_NAME', name)
        // commit('SET_AVATAR', avatar) //可以動態(tài)設置頭像
        commit('SET_INTRODUCTION', fullName)
        resolve(result)
      }).catch(error => {
        reject(error)
      })
    })
  },

Vue + Element前端項目的視圖、Store模塊、API模塊、Web API之間關系如下所示。

登錄后我們獲取用戶身份信息,在控制臺中記錄返回對象信息,可以供參考,如下所示

有了token信息,我們就可以繼續(xù)其他接口的數(shù)據(jù)請求或者提交了,從而可以實現(xiàn)更多的管理功能了。

以上就是Vue Element前端應用開發(fā)之整合ABP框架的前端登錄的詳細內(nèi)容,更多關于Vue Element的資料請關注腳本之家其它相關文章!

相關文章

  • Vue組件的繼承用法示例詳解

    Vue組件的繼承用法示例詳解

    這篇文章主要介紹了Vue組件的繼承用法,本文通過實例代碼案例講解給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Vuex詳細介紹和使用方法

    Vuex詳細介紹和使用方法

    本文詳細講解了Vuex和其使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • vue 驗證碼界面實現(xiàn)點擊后標灰并設置div按鈕不可點擊狀態(tài)

    vue 驗證碼界面實現(xiàn)點擊后標灰并設置div按鈕不可點擊狀態(tài)

    今天小編就為大家分享一篇vue 驗證碼界面實現(xiàn)點擊后標灰并設置div按鈕不可點擊狀態(tài),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue使用mixins優(yōu)化組件

    vue使用mixins優(yōu)化組件

    這篇文章主要介紹了vue如何使用mixins優(yōu)化組件,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-04-04
  • vue中的addEventListener和removeEventListener用法說明

    vue中的addEventListener和removeEventListener用法說明

    這篇文章主要介紹了vue中的addEventListener和removeEventListener用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue中使用SVG-ICON的配置方法

    Vue中使用SVG-ICON的配置方法

    在項目開發(fā)中,經(jīng)常會用到svg圖標,之前用的都是vue-svg-icon,接下來通過本文給大家介紹Vue中使用SVG-ICON的配置方法,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • vue按需加載實例詳解

    vue按需加載實例詳解

    在本篇文章里小編給大家整理的是關于vue按需加載實例的相關知識點內(nèi)容,有需要的朋友們可以學習參考下。
    2019-09-09
  • vue中router.beforeEach()的簡單用法舉例

    vue中router.beforeEach()的簡單用法舉例

    router.beforeEach()一般用來做一些進入頁面的限制,比如沒有登錄,就不能進入某些頁面,只有登錄了之后才有權限查看某些頁面,下面這篇文章主要給大家介紹了關于vue中router.beforeEach()的簡單用法舉例,需要的朋友可以參考下
    2023-01-01
  • Element?UI?Upload?組件上傳圖片可刪除、預覽功能

    Element?UI?Upload?組件上傳圖片可刪除、預覽功能

    這篇文章主要介紹了Element?UI?Upload?組件?上傳圖片可刪除、預覽,設置只允許上傳單張?/?多張圖片的操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • VUE 記賬憑證模塊組件的示例代碼

    VUE 記賬憑證模塊組件的示例代碼

    這篇文章主要介紹了VUE記賬憑證模塊組件的實例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

九龙坡区| 北碚区| 施甸县| 梁平县| 长宁县| 雅江县| 新疆| 绥芬河市| 武宁县| 思茅市| 久治县| 浪卡子县| 曲周县| 堆龙德庆县| 高唐县| 苏尼特左旗| 兴隆县| 博白县| 玉屏| 清原| 高陵县| 青浦区| 衡东县| 昌宁县| 玉山县| 丘北县| 邻水| 边坝县| 托克逊县| 巫山县| 昭觉县| 青岛市| 黑龙江省| 沂南县| 长葛市| 扎赉特旗| 香河县| 车险| 册亨县| 原阳县| 山丹县|