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

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

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

概要

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

SSO

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

前端頁面

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

1. config.js文件

這個(gè)文件放于src/config/sysConfig.js,內(nèi)容很簡(jiǎn)單,是兩個(gè)地址:

'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://[后臺(tái)服務(wù)地址]/user/token?userCode=${user_id}`)
? ? //返回的結(jié)構(gòu)大概想這樣:
? ? // 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權(quán)限
? ? ? ? ? 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]: ''
? ? ? ? }
? ? ? },
? ? ? //這個(gè)是我們加的
? ? ? '/cas/serviceValidate': {
? ? ? ? target: "https://sso.ekin.com",
? ? ? ? changeOrigin: true,
? ? ? ? pathRewrite: {
? ? ? ? ? '/cas': ''
? ? ? ? }
? ? ? }
? ? },
? ? after: require('./mock/mock-server.js')
? },

5. 運(yùn)行

這時(shí)應(yīng)該就可以請(qǐng)求http://test.ekin.com:9528,然后會(huì)跳轉(zhuǎn)的sso登陸頁面,輸入你的域帳號(hào)就能正常加載出網(wǎng)站頁面。

上面涉及到的兩個(gè)接口,是需要后臺(tái)提供的:

  • getUserByUserId
  • getUserRoles

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

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

相關(guān)文章

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

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

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

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

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

    Vue項(xiàng)目的網(wǎng)絡(luò)請(qǐng)求代理到封裝步驟詳解

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

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

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

    用uniapp寫一個(gè)好看的登錄頁面

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

    vue2+elementui進(jìn)行hover提示的使用

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

    vue2安裝vue-router報(bào)錯(cuò)的解決方法

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

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

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

    Vue scoped及deep使用方法解析

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

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

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

最新評(píng)論

沁阳市| 罗平县| 钟山县| 新乡县| 珠海市| 东阿县| 六安市| 古交市| 绿春县| 咸阳市| 宜兰市| 合江县| 承德市| 昭通市| 黔江区| 杭州市| 黄平县| 普宁市| 屏南县| 哈密市| 湄潭县| 明水县| 门源| 奉节县| 桦川县| 陇川县| 宝应县| 文化| 莱芜市| 岳普湖县| 横山县| 青浦区| 应城市| 东乡族自治县| 颍上县| 潞西市| 神池县| 淄博市| 嘉黎县| 府谷县| 读书|