欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3如何實(shí)現(xiàn)單點(diǎn)登錄

 更新時(shí)間:2024年03月04日 14:13:51   作者:左直拳  
這篇文章主要介紹了vue3如何實(shí)現(xiàn)單點(diǎn)登錄問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

嚴(yán)格來(lái)說(shuō),所謂利用vue3實(shí)現(xiàn)單點(diǎn)登錄,是指實(shí)現(xiàn)單點(diǎn)登錄的前端。

身份驗(yàn)證,只能是服務(wù)器端干的活。

一、原理

單點(diǎn)登錄,就是一處登錄,到處運(yùn)行。

以我現(xiàn)在做的項(xiàng)目為例,該項(xiàng)目有多個(gè)子系統(tǒng),采用微服務(wù)架構(gòu),各子系統(tǒng),包括其前端,都是獨(dú)立開發(fā),獨(dú)立部署。那么很自然,應(yīng)當(dāng)有一個(gè)公共登錄。

只需在這個(gè)公共登錄模塊中登錄,那么其他子系統(tǒng)就可以正常使用了。

具體流程

1)當(dāng)打開子系統(tǒng)時(shí),發(fā)現(xiàn)未登錄,則轉(zhuǎn)向公共登錄,否則打開請(qǐng)求頁(yè)面

2)轉(zhuǎn)到公共登錄后,公共登錄檢查是否已登錄,是則附上token返回子系統(tǒng),否則打開登錄頁(yè)面

3)公共登錄成功登錄后,附上token返回子系統(tǒng)

4)子系統(tǒng)使用過(guò)程中,登出后,需要通知公共登錄,公共登錄做相應(yīng)處置

5)前端向后端請(qǐng)求數(shù)據(jù)時(shí),如果后端返回登錄無(wú)效等信息,則做登出處理

二、單點(diǎn)登錄

1、登錄

前端輸入賬號(hào)密碼等,提交到服務(wù)器端,服務(wù)器校驗(yàn)、確認(rèn),生成token返回,登錄成功。

2、登錄狀態(tài)

前端拿到token后,保存在cookie。檢查是否已登錄,就是檢查有沒(méi)有這個(gè)cookie。

選擇cookie而不是localstorage的原因是關(guān)閉瀏覽器后,cookie即失效,而localstorage卻一直保存下來(lái),需要額外處理,麻煩。

const TOKEN_KEY = "token";
export const isLogined = () => {
  return Cookies.get(TOKEN_KEY);
};

3、轉(zhuǎn)向公共登錄

子系統(tǒng)剛開始時(shí)沒(méi)有這個(gè)token,那么轉(zhuǎn)向公共登錄。

跳轉(zhuǎn)時(shí),需要附上返回地址。

vue這類框架,是單頁(yè)面應(yīng)用(SPA),跳轉(zhuǎn)一般用router,但這僅限于系統(tǒng)內(nèi)部;跳到別的系統(tǒng),我找不到有什么方法,只好祭出location.replace()。

1)子系統(tǒng)

export const toLogin = (next) => {
  const ssoUrl = loginSetup.sso;
  location.replace(ssoUrl + "?login=" + location.origin);
};

2)公共登錄模塊接收、檢查并相應(yīng)處置

//路由守衛(wèi)
router.beforeEach((to, from, next) => {
  //請(qǐng)求登錄
  if (to.path !== "/login" && ssoIsToLogin() === true) {
    if (isLogined()) {
      ssoReturn(location.href, next("/"));
    } else {
      next("/login");
    }
    return;
  }

  //請(qǐng)求退出
  if (ssoIsToLogout() === true) {
    ssoLogout();
    return;
  }

  。。。
});
export const ssoIsToLogin = () => {
  return location.href.indexOf("?login") >= 0;
};
export const ssoIsToLogout = () => {
  return location.href.indexOf("?logout") >= 0;
};
export const ssoReturn = (origin, defaultDo) => {
  const p = origin.indexOf("?login=");
  if (p >= 0) {
	//附上token返回子系統(tǒng)
    const url = origin.substr(p + 7) + "?token=" + getToken();
    location.replace(url);
  } else {
    defaultDo();
  }
};

三、單點(diǎn)登出

首先,子系統(tǒng)自己先做相應(yīng)處理,比如刪掉cookie;然后通知公共登錄模塊處置。

所謂通知,就是地址帶上參數(shù),跳轉(zhuǎn)到公共登錄模塊。

//登出
logout(() => {
  toLogout();
});

export const logout = (callback) => {
  _beforeLogout(callback);
};
function _beforeLogout(callback) {
  //先通知后端退出,然后執(zhí)行相關(guān)操作和回調(diào)函數(shù)
  logoutApi().then(() => {
    _clearLoginInfo();//清除cookie等

    if (callback) callback();
  });
}
export const toLogout = () => {//通知登錄模塊
  const ssoUrl = loginSetup.sso;
  location.replace(ssoUrl + "?logout");
};

四、自動(dòng)登錄及登出

1、自動(dòng)登錄

當(dāng)子系統(tǒng)被首次打開時(shí),比如直接在瀏覽器地址欄輸入子系統(tǒng)地址時(shí),系統(tǒng)會(huì)先檢查登錄狀態(tài),發(fā)現(xiàn)未登錄,則轉(zhuǎn)向登錄模塊,見(jiàn)上面 二.3。

2、自動(dòng)登出

有2種情況,一是子系統(tǒng)主動(dòng)登出,二是登錄模塊登出。

子系統(tǒng)主動(dòng)登出,會(huì)先清除本身的登錄狀態(tài),然后通知登錄模塊,執(zhí)行登錄模塊登出,如三所述;如果是登錄模塊登出,那么不會(huì)通知子系統(tǒng)。

但由于token已經(jīng)失效,只要子系統(tǒng)向服務(wù)器端請(qǐng)求數(shù)據(jù),則必然收到相關(guān)信息,觸發(fā)登出處理。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于el-table-column的formatter的使用及說(shuō)明

    關(guān)于el-table-column的formatter的使用及說(shuō)明

    這篇文章主要介紹了關(guān)于el-table-column的formatter的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中?render?函數(shù)功能與原理分析

    vue中?render?函數(shù)功能與原理分析

    這篇文章主要介紹了vue中?render?函數(shù)功能與原理,結(jié)合實(shí)例形式分析了vue中render函數(shù)的基本功能、原理及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2023-06-06
  • vue父子組件通信的高級(jí)用法示例

    vue父子組件通信的高級(jí)用法示例

    這篇文章主要給大家介紹了關(guān)于vue父子組件通信的高級(jí)用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue3:setup的兩個(gè)注意點(diǎn)詳解

    vue3:setup的兩個(gè)注意點(diǎn)詳解

    這篇文章主要介紹了vue3.0中setup的兩個(gè)注意點(diǎn),本文通過(guò)兩種用法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • vue+axios實(shí)現(xiàn)文件下載及vue中使用axios的實(shí)例

    vue+axios實(shí)現(xiàn)文件下載及vue中使用axios的實(shí)例

    這篇文章主要介紹了vue+axios實(shí)現(xiàn)文件下載及vue中使用axios的實(shí)例,需要的朋友可以參考下
    2018-09-09
  • vite.config.ts如何加載.env環(huán)境變量

    vite.config.ts如何加載.env環(huán)境變量

    這篇文章主要介紹了vite.config.ts加載.env環(huán)境變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 淺談vue項(xiàng)目,訪問(wèn)路徑#號(hào)的問(wèn)題

    淺談vue項(xiàng)目,訪問(wèn)路徑#號(hào)的問(wèn)題

    這篇文章主要介紹了淺談vue項(xiàng)目,訪問(wèn)路徑#號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue通過(guò)ollama接口調(diào)用開源模型實(shí)現(xiàn)人機(jī)對(duì)話功能

    vue通過(guò)ollama接口調(diào)用開源模型實(shí)現(xiàn)人機(jī)對(duì)話功能

    文章介紹了如何在本地安裝ollama并配置開源大模型,以及如何通過(guò)JavaScript和Vue.js實(shí)現(xiàn)人機(jī)對(duì)話功能,感興趣的朋友一起看看吧
    2024-11-11
  • 利用vue + element實(shí)現(xiàn)表格分頁(yè)和前端搜索的方法

    利用vue + element實(shí)現(xiàn)表格分頁(yè)和前端搜索的方法

    眾所周知Element 是一套 Vue.js 后臺(tái)組件庫(kù),它能夠幫助你更輕松更快速地開發(fā)后臺(tái)項(xiàng)目。下面這篇文章主要給大家介紹了關(guān)于利用vue + element實(shí)現(xiàn)表格分頁(yè)和前端搜索的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-12-12
  • 基于Vite2.x的Vue 3.x項(xiàng)目的搭建實(shí)現(xiàn)

    基于Vite2.x的Vue 3.x項(xiàng)目的搭建實(shí)現(xiàn)

    這篇文章主要介紹了基于Vite2.x的Vue 3.x項(xiàng)目的搭建實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論