lgsso-sdk 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -7
- package/dist/lgsso-sdk.js +1 -1
- package/package.json +1 -1
- package/src/index.d.ts +14 -3
- package/src/index.js +54 -80
package/README.md
CHANGED
|
@@ -6,12 +6,14 @@ LG SSO登录工具库,用于处理单点登录流程、token管理和系统间
|
|
|
6
6
|
npm install lgsso-sdk --save
|
|
7
7
|
# 或
|
|
8
8
|
yarn add lgsso-sdk
|
|
9
|
+
|
|
9
10
|
## 引入
|
|
10
11
|
// ES模块引入
|
|
11
12
|
import lgsso from 'lgsso-sdk';
|
|
12
13
|
|
|
13
14
|
// CommonJS引入
|
|
14
15
|
const lgsso = require('lgsso-sdk').default;
|
|
16
|
+
|
|
15
17
|
## 初始化
|
|
16
18
|
// 在应用入口处初始化
|
|
17
19
|
async function setupApp() {
|
|
@@ -40,6 +42,7 @@ async function setupApp() {
|
|
|
40
42
|
|
|
41
43
|
// 启动应用
|
|
42
44
|
setupApp();
|
|
45
|
+
|
|
43
46
|
## 核心方法
|
|
44
47
|
|
|
45
48
|
### 1. 获取当前token
|
|
@@ -49,6 +52,7 @@ if (token) {
|
|
|
49
52
|
} else {
|
|
50
53
|
console.log('未找到token');
|
|
51
54
|
}
|
|
55
|
+
|
|
52
56
|
### 2. 退出登录
|
|
53
57
|
async function handleLogout() {
|
|
54
58
|
const result = await lgsso.logout();
|
|
@@ -56,6 +60,7 @@ async function handleLogout() {
|
|
|
56
60
|
console.error('退出失败:', result.msg);
|
|
57
61
|
}
|
|
58
62
|
}
|
|
63
|
+
|
|
59
64
|
### 3. 跳转到其他系统
|
|
60
65
|
async function goToOtherSystem() {
|
|
61
66
|
const result = await lgsso.toUrl('https://other-system.com');
|
|
@@ -63,23 +68,37 @@ async function goToOtherSystem() {
|
|
|
63
68
|
console.error('跳转失败:', result.msg);
|
|
64
69
|
}
|
|
65
70
|
}
|
|
71
|
+
|
|
66
72
|
### 4. 手动删除token
|
|
67
73
|
// 仅删除本地token,不调用退出接口
|
|
68
74
|
lgsso.removeToken();
|
|
75
|
+
|
|
76
|
+
### 5. 获取accessCode(通过token换取)
|
|
77
|
+
// 用于需要手动处理accessCode的场景(如服务端交互)
|
|
78
|
+
async function fetchAccessCode() {
|
|
79
|
+
const result = await lgsso.getAccessCode();
|
|
80
|
+
if (result.code === 0) {
|
|
81
|
+
console.log('获取accessCode成功:', result.data);
|
|
82
|
+
// 可使用result.data进行后续操作(如拼接URL参数)
|
|
83
|
+
} else {
|
|
84
|
+
console.error('获取失败:', result.msg);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
69
88
|
## 错误码说明
|
|
70
89
|
|
|
71
90
|
| 错误码 | 说明 |
|
|
72
91
|
|--------|------|
|
|
73
92
|
| 0 | 成功 |
|
|
74
|
-
| -100 |
|
|
75
|
-
| -101 |
|
|
93
|
+
| -100 | 初始化失败(如配置错误) |
|
|
94
|
+
| -101 | 未初始化(需先调用init) |
|
|
76
95
|
| -102 | 未配置logoutApi |
|
|
77
|
-
| -103 |
|
|
78
|
-
| -104 |
|
|
96
|
+
| -103 | 退出失败(接口请求错误) |
|
|
97
|
+
| -104 | 未提供跳转地址(toUrl方法缺少参数) |
|
|
79
98
|
| -105 | 未配置refreshCodeApi |
|
|
80
99
|
| -106 | 未找到有效token |
|
|
81
|
-
| -107 |
|
|
82
|
-
| -200 |
|
|
100
|
+
| -107 | 跳转失败(接口请求错误) |
|
|
101
|
+
| -200 | 非浏览器环境(调用了依赖window的方法) |
|
|
83
102
|
| -201 | 响应数据格式错误 |
|
|
84
103
|
| -202 | 请求超时 |
|
|
85
104
|
| -203 | 网络请求失败 |
|
|
@@ -96,4 +115,5 @@ npm run build
|
|
|
96
115
|
|
|
97
116
|
# 发布到npm(需先登录)
|
|
98
117
|
npm publish
|
|
99
|
-
|
|
118
|
+
|
|
119
|
+
构建后会在`dist`目录生成`lgsso-sdk.js`文件,可直接引入使用。
|
package/dist/lgsso-sdk.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see lgsso-sdk.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("lgssoSdk",[],t):"object"==typeof exports?exports.lgssoSdk=t():e.lgssoSdk=t()}(this,()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(){var e,t,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function u(r,n,c,i){var u=n&&n.prototype instanceof s?n:s,f=Object.create(u.prototype);return o(f,"_invoke",function(r,n,o){var c,i,u,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,i=0,u=e,p.n=r,a}};function y(r,n){for(i=r,u=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(u=c[(i=c[4])?5:(i=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(i=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,i=0))}if(o||r>1)return a;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),i=f,u=d;(t=i<2?e:u)||!l;){c||(i?i<3?(i>1&&(p.n=-1),y(i,u)):p.n=u:p.v=u);try{if(s=2,c){if(i||(o="next"),t=c[o]){if(!(t=t.call(c,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,i<2&&(i=0)}else 1===i&&(t=c.return)&&t.call(c),i<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),i=1);c=e}else if((t=(l=p.n<0)?u:r.call(n,p))!==a)break}catch(t){c=e,i=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,c,i),!0),f}var a={};function s(){}function f(){}function l(){}t=Object.getPrototypeOf;var p=[][c]?t(t([][c]())):(o(t={},c,function(){return this}),t),y=l.prototype=s.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,o(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e}return f.prototype=l,o(y,"constructor",l),o(l,"constructor",f),f.displayName="GeneratorFunction",o(l,i,"GeneratorFunction"),o(y),o(y,i,"Generator"),o(y,c,function(){return this}),o(y,"toString",function(){return"[object Generator]"}),(n=function(){return{w:u,m:d}})()}function o(e,t,r,n){var c=Object.defineProperty;try{c({},"",{})}catch(e){c=0}o=function(e,t,r,n){function i(t,r){o(e,t,function(e){return this._invoke(t,r,e)})}t?c?c(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},o(e,t,r,n)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function s(e){return f.apply(this,arguments)}function f(){var e;return e=n().m(function e(t){var r,o,c,u,a,s,f,l,p,y,d=arguments;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=d.length>1&&void 0!==d[1]?d[1]:"GET",o=d.length>2&&void 0!==d[2]?d[2]:{},c=d.length>3&&void 0!==d[3]?d[3]:{},u=d.length>4&&void 0!==d[4]?d[4]:5e3,"undefined"!=typeof window){e.n=1;break}return e.a(2,{code:-200,msg:"request方法只能在浏览器环境使用",success:!1});case 1:return a=new AbortController,s=setTimeout(function(){return a.abort()},u),"GET"!==(f={method:r.toUpperCase(),headers:i({"Content-Type":"application/json"},c),signal:a.signal}).method&&o&&(f.body=JSON.stringify(o)),e.p=2,e.n=3,fetch(t,f);case 3:if(l=e.v,clearTimeout(s),l.ok){e.n=4;break}return e.a(2,{code:l.status,msg:"HTTP请求失败: ".concat(l.statusText),success:!1});case 4:return e.p=4,e.n=5,l.json();case 5:return p=e.v,e.a(2,p);case 6:return e.p=6,e.v,e.a(2,{code:-201,msg:"响应数据不是有效的JSON格式",success:!1});case 7:if(e.p=7,y=e.v,clearTimeout(s),"AbortError"!==y.name){e.n=8;break}return e.a(2,{code:-202,msg:"请求超时(".concat(u,"ms)"),success:!1});case 8:return e.a(2,{code:-203,msg:"网络请求失败: ".concat(y.message),success:!1});case 9:return e.a(2)}},e,null,[[4,6],[2,7]])}),f=function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){a(c,n,o,i,u,"next",e)}function u(e){a(c,n,o,i,u,"throw",e)}i(void 0)})},f.apply(this,arguments)}function l(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function c(r,n,o,c){var a=n&&n.prototype instanceof u?n:u,s=Object.create(a.prototype);return p(s,"_invoke",function(r,n,o){var c,u,a,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,u=0,a=e,p.n=r,i}};function y(r,n){for(u=r,a=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(u=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),u=f,a=d;(t=u<2?e:a)||!l;){c||(u?u<3?(u>1&&(p.n=-1),y(u,a)):p.n=a:p.v=a);try{if(s=2,c){if(u||(o="next"),t=c[o]){if(!(t=t.call(c,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,u<2&&(u=0)}else 1===u&&(t=c.return)&&t.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=e}else if((t=(l=p.n<0)?a:r.call(n,p))!==i)break}catch(t){c=e,u=1,a=t}finally{s=1}}return{value:t,done:l}}}(r,o,c),!0),s}var i={};function u(){}function a(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),y=s.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,o,"GeneratorFunction")),e.prototype=Object.create(y),e}return a.prototype=s,p(y,"constructor",s),p(s,"constructor",a),a.displayName="GeneratorFunction",p(s,o,"GeneratorFunction"),p(y),p(y,o,"Generator"),p(y,n,function(){return this}),p(y,"toString",function(){return"[object Generator]"}),(l=function(){return{w:c,m:d}})()}function p(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,r,n){function c(t,r){p(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(c("next",0),c("throw",1),c("return",2))},p(e,t,r,n)}function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function d(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){d(c,n,o,i,u,"next",e)}function u(e){d(c,n,o,i,u,"throw",e)}i(void 0)})}}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=y(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}e.r(t),e.d(t,{default:()=>G,getToken:()=>T,init:()=>P,logout:()=>C,removeToken:()=>_,toUrl:()=>K});var h=null;function w(){return"undefined"!=typeof window&&"undefined"!=typeof document}function O(e){return w()?new URLSearchParams(window.location.search).get(e):null}function j(e){if(w()){var t=new URLSearchParams(window.location.search);if(t.has(e)){t.delete(e);var r="".concat(window.location.pathname).concat(t.toString()?"?".concat(t.toString()):"");window.history.replaceState({},document.title,r)}}}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=v(v({},{accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:""}),e);if("string"!=typeof t.accessCodeKey||""===t.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof t.tokenKey||""===t.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");return t}function P(){return k.apply(this,arguments)}function k(){return k=b(l().m(function e(){var t,r,n,o,c=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:{},e.p=1,h=S(t),r=O(h.accessCodeKey),h.tokenApi){e.n=2;break}return e.a(2,{code:-100,msg:"缺少tokenApi",success:!1});case 2:if(!h.tokenApi||!r){e.n=4;break}return e.n=3,s(h.tokenApi,"POST",{accessCode:r},h.headers,h.timeout);case 3:return 0===(n=e.v).code&&n.data&&localStorage.setItem(h.tokenKey,n.data),j(h.accessCodeKey),setTimeout(function(){j(h.accessCodeKey)},300),e.a(2,n);case 4:T()||(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(window.location.href));case 5:return e.a(2,{code:0,msg:"",success:!0});case 6:return e.p=6,o=e.v,e.a(2,{code:-100,msg:"初始化失败: ".concat(o.message),success:!1})}},e,null,[[1,6]])})),k.apply(this,arguments)}function T(){return h&&w()?localStorage.getItem(h.tokenKey):null}function _(){h&&w()&&localStorage.removeItem(h.tokenKey)}function C(){return E.apply(this,arguments)}function E(){return(E=b(l().m(function e(){var t,r;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(h.logoutApi){e.n=2;break}return e.a(2,{code:-102,msg:"未配置logoutApi",success:!1});case 2:return e.p=2,e.n=3,s(h.logoutApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,T())),h.timeout);case 3:return t=e.v,_(),h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(window.location.href)),e.a(2,t);case 4:return e.p=4,r=e.v,e.a(2,{code:-103,msg:"退出失败: ".concat(r.message),success:!1})}},e,null,[[2,4]])}))).apply(this,arguments)}function K(e){return A.apply(this,arguments)}function A(){return(A=b(l().m(function e(t){var r,n,o,c;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t){e.n=2;break}return e.a(2,{code:-104,msg:"请提供跳转地址",success:!1});case 2:if(h.refreshCodeApi){e.n=3;break}return e.a(2,{code:-105,msg:"未配置refreshCodeApi",success:!1});case 3:if(r=T()){e.n=4;break}return h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(window.location.href)),e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 4:return e.p=4,e.n=5,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,r)),h.timeout);case 5:return 0===(n=e.v).code&&n.data&&w()&&((o=new URL(t)).searchParams.set(h.accessCodeKey,n.data),window.location.href=o.toString()),e.a(2,n);case 6:return e.p=6,c=e.v,e.a(2,{code:-107,msg:"跳转失败: ".concat(c.message),success:!1})}},e,null,[[4,6]])}))).apply(this,arguments)}const G={init:P,getToken:T,removeToken:_,logout:C,toUrl:K};return t})());
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("lgssoSdk",[],t):"object"==typeof exports?exports.lgssoSdk=t():e.lgssoSdk=t()}(this,()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(){var e,t,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function u(r,n,c,i){var u=n&&n.prototype instanceof s?n:s,f=Object.create(u.prototype);return o(f,"_invoke",function(r,n,o){var c,i,u,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,i=0,u=e,p.n=r,a}};function y(r,n){for(i=r,u=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(u=c[(i=c[4])?5:(i=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(i=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,i=0))}if(o||r>1)return a;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),i=f,u=d;(t=i<2?e:u)||!l;){c||(i?i<3?(i>1&&(p.n=-1),y(i,u)):p.n=u:p.v=u);try{if(s=2,c){if(i||(o="next"),t=c[o]){if(!(t=t.call(c,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,i<2&&(i=0)}else 1===i&&(t=c.return)&&t.call(c),i<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),i=1);c=e}else if((t=(l=p.n<0)?u:r.call(n,p))!==a)break}catch(t){c=e,i=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,c,i),!0),f}var a={};function s(){}function f(){}function l(){}t=Object.getPrototypeOf;var p=[][c]?t(t([][c]())):(o(t={},c,function(){return this}),t),y=l.prototype=s.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,o(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e}return f.prototype=l,o(y,"constructor",l),o(l,"constructor",f),f.displayName="GeneratorFunction",o(l,i,"GeneratorFunction"),o(y),o(y,i,"Generator"),o(y,c,function(){return this}),o(y,"toString",function(){return"[object Generator]"}),(n=function(){return{w:u,m:d}})()}function o(e,t,r,n){var c=Object.defineProperty;try{c({},"",{})}catch(e){c=0}o=function(e,t,r,n){function i(t,r){o(e,t,function(e){return this._invoke(t,r,e)})}t?c?c(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},o(e,t,r,n)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function s(e){return f.apply(this,arguments)}function f(){var e;return e=n().m(function e(t){var r,o,c,u,a,s,f,l,p,y,d=arguments;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=d.length>1&&void 0!==d[1]?d[1]:"GET",o=d.length>2&&void 0!==d[2]?d[2]:{},c=d.length>3&&void 0!==d[3]?d[3]:{},u=d.length>4&&void 0!==d[4]?d[4]:5e3,"undefined"!=typeof window){e.n=1;break}return e.a(2,{code:-200,msg:"request方法只能在浏览器环境使用",success:!1});case 1:return a=new AbortController,s=setTimeout(function(){return a.abort()},u),"GET"!==(f={method:r.toUpperCase(),headers:i({"Content-Type":"application/json"},c),signal:a.signal}).method&&o&&(f.body=JSON.stringify(o)),e.p=2,e.n=3,fetch(t,f);case 3:if(l=e.v,clearTimeout(s),l.ok){e.n=4;break}return e.a(2,{code:l.status,msg:"HTTP请求失败: ".concat(l.statusText),success:!1});case 4:return e.p=4,e.n=5,l.json();case 5:return p=e.v,e.a(2,p);case 6:return e.p=6,e.v,e.a(2,{code:-201,msg:"响应数据不是有效的JSON格式",success:!1});case 7:if(e.p=7,y=e.v,clearTimeout(s),"AbortError"!==y.name){e.n=8;break}return e.a(2,{code:-202,msg:"请求超时(".concat(u,"ms)"),success:!1});case 8:return e.a(2,{code:-203,msg:"网络请求失败: ".concat(y.message),success:!1});case 9:return e.a(2)}},e,null,[[4,6],[2,7]])}),f=function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){a(c,n,o,i,u,"next",e)}function u(e){a(c,n,o,i,u,"throw",e)}i(void 0)})},f.apply(this,arguments)}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function c(r,n,o,c){var a=n&&n.prototype instanceof u?n:u,s=Object.create(a.prototype);return y(s,"_invoke",function(r,n,o){var c,u,a,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,u=0,a=e,p.n=r,i}};function y(r,n){for(u=r,a=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(u=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),u=f,a=d;(t=u<2?e:a)||!l;){c||(u?u<3?(u>1&&(p.n=-1),y(u,a)):p.n=a:p.v=a);try{if(s=2,c){if(u||(o="next"),t=c[o]){if(!(t=t.call(c,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,u<2&&(u=0)}else 1===u&&(t=c.return)&&t.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=e}else if((t=(l=p.n<0)?a:r.call(n,p))!==i)break}catch(t){c=e,u=1,a=t}finally{s=1}}return{value:t,done:l}}}(r,o,c),!0),s}var i={};function u(){}function a(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,y(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return a.prototype=s,y(l,"constructor",s),y(s,"constructor",a),a.displayName="GeneratorFunction",y(s,o,"GeneratorFunction"),y(l),y(l,o,"Generator"),y(l,n,function(){return this}),y(l,"toString",function(){return"[object Generator]"}),(p=function(){return{w:c,m:d}})()}function y(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}y=function(e,t,r,n){function c(t,r){y(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(c("next",0),c("throw",1),c("return",2))},y(e,t,r,n)}function d(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){d(c,n,o,i,u,"next",e)}function u(e){d(c,n,o,i,u,"throw",e)}i(void 0)})}}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}e.r(t),e.d(t,{default:()=>x,getAccessCode:()=>G,getToken:()=>C,init:()=>P,logout:()=>K,removeToken:()=>A,toUrl:()=>E});var h=null;function w(){return"undefined"!=typeof window&&"undefined"!=typeof document}function O(e){return w()?new URLSearchParams(window.location.search).get(e):null}function j(e){if(w()){var t=new URLSearchParams(window.location.search);if(t.has(e)){t.delete(e);var r="".concat(window.location.pathname).concat(t.toString()?"?".concat(t.toString()):"");window.history.replaceState({},document.title,r)}}}function S(){return w()?window.location.href:""}function k(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=v(v({},{accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:""}),e);if("string"!=typeof t.accessCodeKey||""===t.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof t.tokenKey||""===t.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");return t}function P(){return T.apply(this,arguments)}function T(){return T=b(p().m(function e(){var t,r,n,o,c=arguments;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:{},e.p=1,h=k(t),r=O(h.accessCodeKey),j(h.accessCodeKey),h.tokenApi){e.n=2;break}return e.a(2,{code:-100,msg:"缺少tokenApi",success:!1});case 2:if(!h.tokenApi||!r){e.n=4;break}return e.n=3,s(h.tokenApi,"POST",{accessCode:r},h.headers,h.timeout);case 3:return 0===(n=e.v).code&&n.data&&localStorage.setItem(h.tokenKey,n.data),setTimeout(function(){return j(h.accessCodeKey)},300),e.a(2,n);case 4:C()||(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S())));case 5:return e.a(2,{code:0,msg:"",success:!0});case 6:return e.p=6,o=e.v,e.a(2,{code:-100,msg:"初始化失败: ".concat(o.message),success:!1})}},e,null,[[1,6]])})),T.apply(this,arguments)}function C(){return h&&w()?localStorage.getItem(h.tokenKey):null}function A(){h&&w()&&localStorage.removeItem(h.tokenKey)}function K(){return _.apply(this,arguments)}function _(){return(_=b(p().m(function e(){var t,r;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(h.logoutApi){e.n=2;break}return e.a(2,{code:-102,msg:"未配置logoutApi",success:!1});case 2:return e.p=2,e.n=3,s(h.logoutApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,C())),h.timeout);case 3:return t=e.v,A(),h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S()))),e.a(2,t);case 4:return e.p=4,r=e.v,e.a(2,{code:-103,msg:"退出失败: ".concat(r.message),success:!1})}},e,null,[[2,4]])}))).apply(this,arguments)}function E(e){return U.apply(this,arguments)}function U(){return(U=b(p().m(function e(t){var r,n,o,c;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t){e.n=2;break}return e.a(2,{code:-104,msg:"请提供跳转地址",success:!1});case 2:if(h.refreshCodeApi){e.n=3;break}return e.a(2,{code:-105,msg:"未配置refreshCodeApi",success:!1});case 3:if(r=C()){e.n=4;break}return h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S()))),e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 4:return e.p=4,e.n=5,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,r)),h.timeout);case 5:return 0===(n=e.v).code&&n.data&&w()&&((o=new URL(t)).searchParams.set(h.accessCodeKey,n.data),window.location.href=o.toString()),e.a(2,n);case 6:return e.p=6,c=e.v,e.a(2,{code:-107,msg:"跳转失败: ".concat(c.message),success:!1})}},e,null,[[4,6]])}))).apply(this,arguments)}var G=function(){var e=b(p().m(function e(){var t;return p().w(function(e){for(;;)switch(e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t=C()){e.n=2;break}return e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 2:return e.n=3,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,t)),h.timeout);case 3:return e.a(2,e.v)}},e)}));return function(){return e.apply(this,arguments)}}();const x={init:P,getToken:C,removeToken:A,logout:K,toUrl:E,getAccessCode:G};return t})());
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: Robin LEI
|
|
3
|
+
* @Date: 2025-08-14 17:52:46
|
|
4
|
+
* @LastEditTime: 2025-08-19 08:55:22
|
|
5
|
+
* @FilePath: \lg-wms-admind:\业务代码\中联钢信\五服一管\complete-lgsso-sdk\src\index.d.ts
|
|
6
|
+
*/
|
|
1
7
|
/**
|
|
2
8
|
* lgsso-sdk 类型定义
|
|
3
9
|
*/
|
|
@@ -30,7 +36,7 @@ declare namespace LgSso {
|
|
|
30
36
|
msg: string;
|
|
31
37
|
/** 是否成功 */
|
|
32
38
|
success: boolean;
|
|
33
|
-
/**
|
|
39
|
+
/** 业务数据(如token、accessCode等) */
|
|
34
40
|
data?: any;
|
|
35
41
|
}
|
|
36
42
|
}
|
|
@@ -67,10 +73,15 @@ interface LgSsoInstance {
|
|
|
67
73
|
* @returns 接口返回结果
|
|
68
74
|
*/
|
|
69
75
|
toUrl: (redirectUrl: string) => Promise<LgSso.ApiResult>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 获取accessCode(通过token换取)
|
|
79
|
+
* @returns 接口返回结果(data为accessCode)
|
|
80
|
+
*/
|
|
81
|
+
getAccessCode: () => Promise<LgSso.ApiResult>;
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
declare const lgsso: LgSsoInstance;
|
|
73
85
|
|
|
74
86
|
export default lgsso;
|
|
75
|
-
export { LgSso };
|
|
76
|
-
|
|
87
|
+
export { LgSso };
|
package/src/index.js
CHANGED
|
@@ -36,6 +36,15 @@ function removeQueryParam(name) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* 获取当前完整URL(包含所有参数)
|
|
41
|
+
* @returns {string} 当前完整URL(如 local.watest.zlgx.com:3000?a=1)
|
|
42
|
+
*/
|
|
43
|
+
function getCurrentUrlWithParams() {
|
|
44
|
+
if (!isBrowser()) return '';
|
|
45
|
+
return window.location.href; // 直接返回完整URL(含参数)
|
|
46
|
+
}
|
|
47
|
+
|
|
39
48
|
/**
|
|
40
49
|
* 验证并合并配置
|
|
41
50
|
* @param {Object} options - 用户配置
|
|
@@ -53,7 +62,6 @@ function validateAndMergeConfig(options = {}) {
|
|
|
53
62
|
logOutUrl: ''
|
|
54
63
|
};
|
|
55
64
|
|
|
56
|
-
// 合并配置
|
|
57
65
|
const merged = { ...defaults, ...options };
|
|
58
66
|
|
|
59
67
|
// 基础验证
|
|
@@ -74,19 +82,14 @@ function validateAndMergeConfig(options = {}) {
|
|
|
74
82
|
*/
|
|
75
83
|
export async function init(options = {}) {
|
|
76
84
|
try {
|
|
77
|
-
// 验证配置
|
|
78
85
|
config = validateAndMergeConfig(options);
|
|
79
86
|
|
|
80
|
-
// 从URL获取accessCode
|
|
81
87
|
const accessCode = getQueryParam(config.accessCodeKey);
|
|
88
|
+
removeQueryParam(config.accessCodeKey);
|
|
82
89
|
if (!config.tokenApi) {
|
|
83
|
-
return {
|
|
84
|
-
code: -100,
|
|
85
|
-
msg: `缺少tokenApi`,
|
|
86
|
-
success: false
|
|
87
|
-
};
|
|
90
|
+
return { code: -100, msg: `缺少tokenApi`, success: false };
|
|
88
91
|
}
|
|
89
|
-
|
|
92
|
+
|
|
90
93
|
if (config.tokenApi && accessCode) {
|
|
91
94
|
const result = await request(
|
|
92
95
|
config.tokenApi,
|
|
@@ -96,32 +99,19 @@ export async function init(options = {}) {
|
|
|
96
99
|
config.timeout
|
|
97
100
|
);
|
|
98
101
|
|
|
99
|
-
// 无论code是否为0,只要返回了token就存储
|
|
100
102
|
if (result.code === 0 && result.data) {
|
|
101
103
|
localStorage.setItem(config.tokenKey, result.data);
|
|
102
104
|
}
|
|
103
|
-
removeQueryParam(config.accessCodeKey);
|
|
104
|
-
setTimeout(() => {
|
|
105
|
-
// 移除URL中的accessCode
|
|
106
|
-
removeQueryParam(config.accessCodeKey);
|
|
107
|
-
}, 300)
|
|
105
|
+
setTimeout(() => removeQueryParam(config.accessCodeKey), 300);
|
|
108
106
|
return result;
|
|
109
107
|
} else if (!getToken()) {
|
|
110
|
-
|
|
108
|
+
// 跳转时携带完整URL参数(如 local.watest.zlgx.com:3000?a=1)
|
|
109
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
111
110
|
}
|
|
112
111
|
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
code: 0,
|
|
116
|
-
msg: '',
|
|
117
|
-
success: true
|
|
118
|
-
};
|
|
112
|
+
return { code: 0, msg: '', success: true };
|
|
119
113
|
} catch (error) {
|
|
120
|
-
return {
|
|
121
|
-
code: -100,
|
|
122
|
-
msg: `初始化失败: ${error.message}`,
|
|
123
|
-
success: false
|
|
124
|
-
};
|
|
114
|
+
return { code: -100, msg: `初始化失败: ${error.message}`, success: false };
|
|
125
115
|
}
|
|
126
116
|
}
|
|
127
117
|
|
|
@@ -148,23 +138,14 @@ export function removeToken() {
|
|
|
148
138
|
*/
|
|
149
139
|
export async function logout() {
|
|
150
140
|
if (!config) {
|
|
151
|
-
return {
|
|
152
|
-
code: -101,
|
|
153
|
-
msg: '请先调用init方法初始化',
|
|
154
|
-
success: false
|
|
155
|
-
};
|
|
141
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
156
142
|
}
|
|
157
143
|
|
|
158
144
|
if (!config.logoutApi) {
|
|
159
|
-
return {
|
|
160
|
-
code: -102,
|
|
161
|
-
msg: '未配置logoutApi',
|
|
162
|
-
success: false
|
|
163
|
-
};
|
|
145
|
+
return { code: -102, msg: '未配置logoutApi', success: false };
|
|
164
146
|
}
|
|
165
147
|
|
|
166
148
|
try {
|
|
167
|
-
// 调用退出接口
|
|
168
149
|
const result = await request(
|
|
169
150
|
config.logoutApi,
|
|
170
151
|
'POST',
|
|
@@ -173,21 +154,16 @@ export async function logout() {
|
|
|
173
154
|
config.timeout
|
|
174
155
|
);
|
|
175
156
|
|
|
176
|
-
// 无论接口返回如何,都删除本地token
|
|
177
157
|
removeToken();
|
|
178
158
|
|
|
179
|
-
// 跳转到退出地址
|
|
180
159
|
if (config.logOutUrl && isBrowser()) {
|
|
181
|
-
|
|
160
|
+
// 携带完整URL参数跳转
|
|
161
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
182
162
|
}
|
|
183
163
|
|
|
184
164
|
return result;
|
|
185
165
|
} catch (error) {
|
|
186
|
-
return {
|
|
187
|
-
code: -103,
|
|
188
|
-
msg: `退出失败: ${error.message}`,
|
|
189
|
-
success: false
|
|
190
|
-
};
|
|
166
|
+
return { code: -103, msg: `退出失败: ${error.message}`, success: false };
|
|
191
167
|
}
|
|
192
168
|
}
|
|
193
169
|
|
|
@@ -198,45 +174,27 @@ export async function logout() {
|
|
|
198
174
|
*/
|
|
199
175
|
export async function toUrl(redirectUrl) {
|
|
200
176
|
if (!config) {
|
|
201
|
-
return {
|
|
202
|
-
code: -101,
|
|
203
|
-
msg: '请先调用init方法初始化',
|
|
204
|
-
success: false
|
|
205
|
-
};
|
|
177
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
206
178
|
}
|
|
207
179
|
|
|
208
180
|
if (!redirectUrl) {
|
|
209
|
-
return {
|
|
210
|
-
code: -104,
|
|
211
|
-
msg: '请提供跳转地址',
|
|
212
|
-
success: false
|
|
213
|
-
};
|
|
181
|
+
return { code: -104, msg: '请提供跳转地址', success: false };
|
|
214
182
|
}
|
|
215
183
|
|
|
216
184
|
if (!config.refreshCodeApi) {
|
|
217
|
-
return {
|
|
218
|
-
code: -105,
|
|
219
|
-
msg: '未配置refreshCodeApi',
|
|
220
|
-
success: false
|
|
221
|
-
};
|
|
185
|
+
return { code: -105, msg: '未配置refreshCodeApi', success: false };
|
|
222
186
|
}
|
|
223
187
|
|
|
224
|
-
// 获取当前token
|
|
225
188
|
const token = getToken();
|
|
226
189
|
if (!token) {
|
|
227
|
-
// 没有token时跳转到登录页
|
|
228
190
|
if (config.logOutUrl && isBrowser()) {
|
|
229
|
-
|
|
191
|
+
// 携带完整URL参数跳转
|
|
192
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
230
193
|
}
|
|
231
|
-
return {
|
|
232
|
-
code: -106,
|
|
233
|
-
msg: '未找到有效token',
|
|
234
|
-
success: false
|
|
235
|
-
};
|
|
194
|
+
return { code: -106, msg: '未找到有效token', success: false };
|
|
236
195
|
}
|
|
237
196
|
|
|
238
197
|
try {
|
|
239
|
-
// 调用接口换取新accessCode
|
|
240
198
|
const result = await request(
|
|
241
199
|
config.refreshCodeApi,
|
|
242
200
|
'POST',
|
|
@@ -245,8 +203,6 @@ export async function toUrl(redirectUrl) {
|
|
|
245
203
|
config.timeout
|
|
246
204
|
);
|
|
247
205
|
|
|
248
|
-
// 成功获取code后跳转
|
|
249
|
-
|
|
250
206
|
if (result.code === 0 && result.data && isBrowser()) {
|
|
251
207
|
const url = new URL(redirectUrl);
|
|
252
208
|
url.searchParams.set(config.accessCodeKey, result.data);
|
|
@@ -255,19 +211,37 @@ export async function toUrl(redirectUrl) {
|
|
|
255
211
|
|
|
256
212
|
return result;
|
|
257
213
|
} catch (error) {
|
|
258
|
-
return {
|
|
259
|
-
code: -107,
|
|
260
|
-
msg: `跳转失败: ${error.message}`,
|
|
261
|
-
success: false
|
|
262
|
-
};
|
|
214
|
+
return { code: -107, msg: `跳转失败: ${error.message}`, success: false };
|
|
263
215
|
}
|
|
264
216
|
}
|
|
265
217
|
|
|
266
|
-
|
|
218
|
+
/**
|
|
219
|
+
* 获取accessCode(修复token未定义问题)
|
|
220
|
+
* @returns {Promise<Object>} 接口返回结果
|
|
221
|
+
*/
|
|
222
|
+
export const getAccessCode = async () => {
|
|
223
|
+
if (!config) {
|
|
224
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
225
|
+
}
|
|
226
|
+
const token = getToken(); // 从localStorage获取token
|
|
227
|
+
if (!token) {
|
|
228
|
+
return { code: -106, msg: '未找到有效token', success: false };
|
|
229
|
+
}
|
|
230
|
+
return await request(
|
|
231
|
+
config.refreshCodeApi,
|
|
232
|
+
'POST',
|
|
233
|
+
{},
|
|
234
|
+
{ ...config.headers, [config.tokenKey]: token }, // 使用获取到的token
|
|
235
|
+
config.timeout
|
|
236
|
+
);
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// 默认导出(修复方法名拼写错误:getCode → getAccessCode)
|
|
267
240
|
export default {
|
|
268
241
|
init,
|
|
269
242
|
getToken,
|
|
270
243
|
removeToken,
|
|
271
244
|
logout,
|
|
272
|
-
toUrl
|
|
273
|
-
|
|
245
|
+
toUrl,
|
|
246
|
+
getAccessCode
|
|
247
|
+
};
|