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

Vue-Element-Admin前端接入SSO的方法步驟

 更新時間:2022年04月28日 09:31:54   作者:kielin  
本文主要介紹了Vue-Element-Admin前端接入SSO的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

概要

相信很多像我一樣初入門前端的時候,都是基于某個模板來學。 vue-element-admin 或者 vue-element-template是一個很好的模板。而在后期,一般公司都會要求接入SSO, 作者覺得這個太簡單了,都是后臺的工作,前端 只需判斷后臺返回的token或者其他信息就可以,所以在相關文檔中也沒有太多提及。相信仍有一部分人無從下手,所以在這里重新記錄一下。

SSO

至于如果搭建SSO,這里不說,自行搜索。
我們用的SSO是基于: Apereo Central Authentication Service 5.3.9
假設搭建好的SSO地址是: https://sso.ekin.com

前端頁面

基于vue-element-admin前端頁面默認地址:http://localhost:9528
如果你用的是windows,可以更改hosts文件: 127.0.0.1 test.ekin.com,
這樣前端頁面地址是:http://test.ekin.com:9528

1. config.js文件

這個文件放于src/config/sysConfig.js,內容很簡單,是兩個地址:

'use strict'
var sysConfig = {
?? ?//sso address
? casServerUrl: "https://sso.ekin.com",
? //frontend address
? sysDomain: "http://test.ekin.com:9528"
}
module.exports = sysConfig

2. SSO.js文件

放于前端目錄:src/utils/sso.js

import x2js from 'x2js'
import axios from 'axios'
const sysConfig = require('@/config/sysConfig')
import {
? getToken,
? setToken
} from '@/utils/auth'
import store from '../store'
import router from '../router'
const casServerUrl = sysConfig.casServerUrl
const sysDomain = sysConfig.sysDomain
const casLoginUrl = `${casServerUrl}/login`
export default {

? enableCasAuth() {
? ? const token = getToken()
? ? if (token) {
? ? ? return
? ? }

? ? if (this.isCasCallback()) {
? ? ? const ticket = this.getTicket()
? ? ? this.getAuthInfo(ticket).then(res => {
? ? ? ? debugger
? ? ? ? if (res.success) {
? ? ? ? ? const user_id = res.username.__text
? ? ? ? ? localStorage.setItem('name', user_id)
? ? ? ? ? this.login(user_id)
? ? ? ? } else {
? ? ? ? ? this.toAuth()
? ? ? ? }
? ? ? })
? ? } else {
? ? ? this.toAuth()
? ? }
? },
? toAuth() {
? ? location.href = `${casLoginUrl}?service=${sysDomain}`
? },
? toIndex(path) {
? ? location.href = sysDomain + '/#/' + path
? },
? getTicket() {
? ? var reg = new RegExp('(^|&)ticket=([^&]*)(&|$)', 'i')
? ? var r = window.location.search.substr(1).match(reg)
? ? if (r != null) return unescape(r[2])
? ? return null
? },
? getAuthInfo(ticket) {
? ? return axios.get(`/cas/serviceValidate?service=${sysDomain}&ticket=${ticket}`).then(res => {
? ? ? debugger
? ? ? const x2j = new x2js()
? ? ? var info = x2j.xml2js(res.data)
? ? ? if (info.serviceResponse.authenticationSuccess) {
? ? ? ? return {
? ? ? ? ? 'success': true,
? ? ? ? ? 'username': info.serviceResponse.authenticationSuccess.user
? ? ? ? }
? ? ? } else {
? ? ? ? return {
? ? ? ? ? 'success': false,
? ? ? ? ? 'username': ''
? ? ? ? }
? ? ? }
? ? })
? },
? isCasCallback() {
? ? const url = window.location.href
? ? return url.indexOf(sysDomain + '/?ticket=') != -1
? },
? logout() {
? ? location.href = `${casServerUrl}/logout?service=${sysDomain}`
? },
? getUserByUserId(user_id) {
? ? return axios.post(`http://[后臺服務地址]/user/token?userCode=${user_id}`)
? ? //返回的結構大概想這樣:
? ? // let data = {
? ? // ? code: 1,
? ? // ? token: 'admin-token'
? ? // }

? },
? login(user_id) {
? ? this.getUserByUserId(user_id)
? ? ? .then(async (response) => {
? ? ? ? const data = response.data
? ? ? ? if (data.code === 1) {

? ? ? ? ? setToken(data.token)
? ? ? ? ? var token = data.token
? ? ? ? ? axios.defaults.headers.common['token'] = getToken()
? ? ? ? ? store.commit('user/SET_TOKEN', token)
? ? ? ? ? // const {
? ? ? ? ? // ? roles
? ? ? ? ? // } = await store.dispatch('user/getInfo')
? ? ? ? ? //為了方便,直接給予ADMIN權限
? ? ? ? ? let roles = ['ADMIN']
? ? ? ? ? const accessRoutes = store.dispatch('permission/generateRoutes', roles)
? ? ? ? ? router.addRoutes(accessRoutes)
? ? ? ? } else {
? ? ? ? ? router.push({
? ? ? ? ? ? path: '/401'
? ? ? ? ? })
? ? ? ? }
? ? ? })
? }
}

3. 修改permission.js文件

引入sso.js

import cas from '@/utils/sso'

更改router.beforeEach

router.beforeEach(async (to, from, next) => {
? // start progress bar
? NProgress.start()

? // set page title
? document.title = getPageTitle(to.meta.title)

? // determine whether the user has logged in
? const hasToken = getToken()

? if (hasToken) {
? ? // cut for breif
? } else {
? ? /* has no token*/

? ? if (whiteList.indexOf(to.path) !== -1) {
? ? ? // in the free login whitelist, go directly
? ? ? next()
? ? } else {
? ? ? // other pages that do not have permission to access are redirected to the login page.
? ? ? // next(`/login?redirect=${to.path}`)
? ? ? // NProgress.done()
? ? ? cas.enableCasAuth();
? ? ? next();
? ? ? NProgress.done();
? ? }
? }
})

4. 修改vue.config.js文件

?devServer: {
? ? port: port,
? ? open: true,
? ? disableHostCheck: true,
? ? overlay: {
? ? ? warnings: false,
? ? ? errors: true
? ? },
? ? proxy: {
? ? ? // change xxx-api/login => mock/login
? ? ? // detail: https://cli.vuejs.org/config/#devserver-proxy
? ? ? [process.env.VUE_APP_BASE_API]: {
? ? ? ? target: `http://127.0.0.1:${port}/mock`,
? ? ? ? changeOrigin: true,
? ? ? ? pathRewrite: {
? ? ? ? ? ['^' + process.env.VUE_APP_BASE_API]: ''
? ? ? ? }
? ? ? },
? ? ? //這個是我們加的
? ? ? '/cas/serviceValidate': {
? ? ? ? target: "https://sso.ekin.com",
? ? ? ? changeOrigin: true,
? ? ? ? pathRewrite: {
? ? ? ? ? '/cas': ''
? ? ? ? }
? ? ? }
? ? },
? ? after: require('./mock/mock-server.js')
? },

5. 運行

這時應該就可以請求http://test.ekin.com:9528,然后會跳轉的sso登陸頁面,輸入你的域帳號就能正常加載出網(wǎng)站頁面。

上面涉及到的兩個接口,是需要后臺提供的:

  • getUserByUserId
  • getUserRoles

但這兩個不想麻煩合并成一個就可以了,或者直接Mock數(shù)據(jù)返回就可以

到此這篇關于Vue-Element-Admin前端接入SSO的方法步驟的文章就介紹到這了,更多相關Vue-Element-Admin接入SSO內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue項目設置多個靜態(tài)文件及自定義靜態(tài)文件目錄的方案詳解

    Vue項目設置多個靜態(tài)文件及自定義靜態(tài)文件目錄的方案詳解

    本文介紹了如何在Vue項目中配置多個靜態(tài)文件目錄,并提供了使用Vite和Webpack實現(xiàn)的示例,通過在vite.config.ts或vue.config.js中引入相關插件和配置,可以輕松實現(xiàn)自定義靜態(tài)文件目錄,希望這些內容對您有所幫助,感興趣的朋友一起看看吧
    2025-01-01
  • vue實現(xiàn)面包屑的方法

    vue實現(xiàn)面包屑的方法

    這篇文章主要為大家詳細介紹了vue實現(xiàn)面包屑的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue項目的網(wǎng)絡請求代理到封裝步驟詳解

    Vue項目的網(wǎng)絡請求代理到封裝步驟詳解

    這篇文章主要介紹了Vue項目的網(wǎng)絡請求代理到封裝步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue修飾符v-model及.sync原理及區(qū)別詳解

    vue修飾符v-model及.sync原理及區(qū)別詳解

    這篇文章主要為大家介紹了vue修飾符v-model及.sync原理及使用區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 用uniapp寫一個好看的登錄頁面

    用uniapp寫一個好看的登錄頁面

    隨著移動互聯(lián)網(wǎng)的發(fā)展,移動端app的使用越來越普及,而對于開發(fā)者來說如何設計一款簡單易用的app是一項不容忽視的工作,其中登錄頁面是app使用過程中最基礎的組成部分之一,這篇文章主要給大家介紹了關于用uniapp寫一個好看的登錄頁面的相關資料,需要的朋友可以參考下
    2024-03-03
  • vue2+elementui進行hover提示的使用

    vue2+elementui進行hover提示的使用

    本文主要介紹了vue2+elementui進行hover提示的使用,主要分為外部和內部,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • vue2安裝vue-router報錯的解決方法

    vue2安裝vue-router報錯的解決方法

    vue-router的安裝不是理想化的,會出現(xiàn)問題,需要靜下心認真研究,熬過去就會懂得更多,這篇文章主要給大家介紹了關于vue2安裝vue-router報錯的解決方法,需要的朋友可以參考下
    2022-03-03
  • 15 分鐘掌握vue-next函數(shù)式api(小結)

    15 分鐘掌握vue-next函數(shù)式api(小結)

    這篇文章主要介紹了15 分鐘掌握vue-next函數(shù)式api(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Vue scoped及deep使用方法解析

    Vue scoped及deep使用方法解析

    這篇文章主要介紹了Vue scoped及deep使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 淺談Vue3.0新版API之composition-api入坑指南

    淺談Vue3.0新版API之composition-api入坑指南

    這篇文章主要介紹了Vue3.0新版API之composition-api入坑指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論

中阳县| 右玉县| 延川县| 吉隆县| 惠州市| 腾冲县| 江永县| 山西省| 祁连县| 逊克县| 凯里市| 玉溪市| 晋江市| 贡嘎县| 阿克陶县| 肇庆市| 木兰县| 五峰| 班玛县| 太湖县| 黑河市| 赤水市| 涞源县| 平南县| 天气| 资溪县| 西贡区| 紫云| 固镇县| 东乡县| 辽中县| 吉安市| 罗定市| 洮南市| 阿克陶县| 淳化县| 平原县| 昔阳县| 安岳县| 南安市| 阿城市|