92 lines
2.5 KiB
JavaScript
92 lines
2.5 KiB
JavaScript
import { UserManager } from 'oidc-client'
|
|
import { createLocalStorage } from '../cache'
|
|
let oidcManager = null
|
|
|
|
export const initServe = () => {
|
|
if (oidcManager) return oidcManager
|
|
const { VITE_AUTHORITY, VITE_CLIENT_ID, VITE_CLIENT_SECRET, VITE_REDIRECT_URI } = import.meta.env
|
|
oidcManager = new UserManager({
|
|
/* 认证服务器 */
|
|
authority: VITE_AUTHORITY,
|
|
/* 客户端id */
|
|
client_id: VITE_CLIENT_ID,
|
|
client_secret: VITE_CLIENT_SECRET,
|
|
/* 回调客户端页面 */
|
|
redirect_uri: VITE_REDIRECT_URI,
|
|
post_logout_redirect_uri: VITE_REDIRECT_URI,
|
|
response_type: 'code',
|
|
/* 授权范围 */
|
|
scope: 'openid profile',
|
|
automaticSilentRenew: true,
|
|
revokeAccessTokenOnSignout: true,
|
|
metadata: {
|
|
issuer: `${VITE_AUTHORITY}`,
|
|
authorization_endpoint: `${VITE_AUTHORITY}/oauth2/authorize`,
|
|
token_endpoint: `${VITE_AUTHORITY}/oauth2/token`,
|
|
userinfo_endpoint: `${VITE_AUTHORITY}/userinfo`,
|
|
end_session_endpoint: `${VITE_AUTHORITY}/toLogout`,
|
|
revocation_endpoint: `${VITE_AUTHORITY}/oauth2/revoke`
|
|
}
|
|
})
|
|
return oidcManager
|
|
}
|
|
|
|
export const getUserInfo = async() => {
|
|
oidcManager = initServe()
|
|
return await oidcManager.getUser()
|
|
}
|
|
/* 登录 */
|
|
export const signinRedirect = async() => {
|
|
oidcManager = initServe()
|
|
oidcManager.signinRedirect({})
|
|
.then(res => {
|
|
setPath(window.location.pathname)
|
|
console.log('signed in', res)
|
|
}).catch(err => {
|
|
console.err(err)
|
|
})
|
|
}
|
|
/* 登录回调 */
|
|
export const signinRedirectCallback = async() => {
|
|
const userInfo = await getUserInfo()
|
|
if (!userInfo) {
|
|
oidcManager = initServe()
|
|
return await oidcManager.signinRedirectCallback()
|
|
}
|
|
}
|
|
/* 退出 */
|
|
export const signoutRedirect = () => {
|
|
oidcManager = initServe()
|
|
oidcManager.signoutRedirect({})
|
|
.then(function(res) {
|
|
setPath(window.location.pathname)
|
|
console.log('signed out', res)
|
|
}).catch(function(err) {
|
|
console.log(err)
|
|
})
|
|
}
|
|
/* 退出回调 */
|
|
export const signoutRedirectCallback = async() => {
|
|
const userInfo = await getUserInfo()
|
|
if (!userInfo) {
|
|
oidcManager = initServe()
|
|
return await oidcManager.signoutRedirectCallback()
|
|
}
|
|
}
|
|
|
|
const PATH_CODE = 'redirect_path'
|
|
const DURATION = 24 * 60 * 60
|
|
export const isPath = createLocalStorage()
|
|
/* 获取Path */
|
|
export function getPath() {
|
|
return isPath.get(PATH_CODE)
|
|
}
|
|
/* 设置Path */
|
|
export function setPath(Path, duration = DURATION) {
|
|
isPath.set(PATH_CODE, Path, duration)
|
|
}
|
|
/* 移出Path */
|
|
export function removePath() {
|
|
isPath.remove(PATH_CODE)
|
|
}
|