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

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

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

嚴(yán)格來說,所謂利用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)使用過程中,登出后,需要通知公共登錄,公共登錄做相應(yīng)處置

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

二、單點(diǎn)登錄

1、登錄

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

2、登錄狀態(tài)

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

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

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

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

子系統(tǒng)剛開始時(shí)沒有這個(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)向登錄模塊,見上面 二.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)文章

  • vue中的生命周期及鉤子函數(shù)

    vue中的生命周期及鉤子函數(shù)

    這篇文章主要介紹了vue中的生命周期及鉤子函數(shù),Vue?實(shí)例有一個(gè)完整的生命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載?Dom、渲染,下面文章詳細(xì)介紹,需要的朋友可以參考一下
    2021-12-12
  • Vue實(shí)現(xiàn)商品飛入購(gòu)物車效果(電商項(xiàng)目)

    Vue實(shí)現(xiàn)商品飛入購(gòu)物車效果(電商項(xiàng)目)

    這篇文章主要介紹了Vue實(shí)現(xiàn)商品飛入購(gòu)物車效果(電商項(xiàng)目),這種效果在一些電商平臺(tái)經(jīng)常會(huì)用到,今天小編通過代碼詳解,需要的朋友可以參考下
    2019-11-11
  • vue關(guān)于Promise的使用方式

    vue關(guān)于Promise的使用方式

    這篇文章主要介紹了vue關(guān)于Promise的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 淺談vue+vite項(xiàng)目部署會(huì)遇到的幾個(gè)問題

    淺談vue+vite項(xiàng)目部署會(huì)遇到的幾個(gè)問題

    本文主要介紹了vue+vite項(xiàng)目部署會(huì)遇到的幾個(gè)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue實(shí)現(xiàn)圖片上傳功能

    vue實(shí)現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 使用element組件table表格實(shí)現(xiàn)某條件下復(fù)選框無法勾選

    使用element組件table表格實(shí)現(xiàn)某條件下復(fù)選框無法勾選

    這篇文章主要介紹了使用element組件table表格實(shí)現(xiàn)某條件下復(fù)選框無法勾選問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue?element-ui的el-input-number默認(rèn)值設(shè)置為空方法

    vue?element-ui的el-input-number默認(rèn)值設(shè)置為空方法

    這篇文章主要給大家介紹了關(guān)于vue?element-ui的el-input-number默認(rèn)值設(shè)置為空的相關(guān)資料,el-input-number組件是Element?UI非常常用的一個(gè)數(shù)字輸入框組件,它提供了默認(rèn)值設(shè)置的選項(xiàng),需要的朋友可以參考下
    2023-08-08
  • TinyMCE富文本編輯器在Vue中的使用方式

    TinyMCE富文本編輯器在Vue中的使用方式

    這篇文章主要介紹了TinyMCE富文本編輯器在Vue中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • vue 2.0路由之路由嵌套示例詳解

    vue 2.0路由之路由嵌套示例詳解

    這篇文章主要給大家介紹了vue 2.0路由之路由嵌套的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • vue-router history模式下的微信分享小結(jié)

    vue-router history模式下的微信分享小結(jié)

    本篇文章主要介紹了vue-router history模式下的微信分享小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論

通化市| 托克逊县| 孝义市| 汾西县| 都昌县| 京山县| 鹤峰县| 额尔古纳市| 云阳县| 温宿县| 白沙| 区。| 盐津县| 昌宁县| 万年县| 微山县| 丹东市| 勐海县| 涟水县| 湟源县| 慈利县| 霸州市| 萨嘎县| 平顺县| 南乐县| 西宁市| 通化县| 峡江县| 彭州市| 深水埗区| 赞皇县| 巩义市| 玉树县| 张家川| 通江县| 庄浪县| 松江区| 泰顺县| 鄢陵县| 成都市| 博爱县|