第一步、安装 oidc-client
npm install oidc-client
第二步、配置config.js
在public/config.js中新建 authOptions
var authOptions= {
authority: "https://localhost:5001",
client_id: "js",
redirect_uri: "https://localhost:5003/callback.vue",
response_type: "code",
scope:"openid profile api1",
post_logout_redirect_uri : "https://localhost:5003/index.vue",
};
第三步、创建 oidc.js 工具类
在utils中创建oidc.js文件,内容如下
import Oidc from "oidc-client";
var mgr = new Oidc.UserManager(authOptions);
export function getUser(){
return new Promise(((resolve, reject) => {
mgr.getUser().then(function (user) {
resolve(user)
})
.catch(error =>{
reject(error)
});
}))
}
export function login() {
mgr.signinRedirect();
}
export function logout() {
mgr.signoutRedirect();
}
第四步、创建 callback.vue 回调页面
在 views 中新建 callback.vue 页面
<template>
<div>
</div>
</template>
<script setup>
import { onMounted } from 'vue'
import Oidc from "oidc-client";
import { useRouter } from 'vue-router'
import { getUser,login,logout } from '@/utils/oidc'
import {setToken} from '@/utils/auth'
const router = useRouter()
onMounted(() =>{
new Oidc.UserManager({response_mode:"query"}).signinRedirectCallback().then(function() {
console.log('运行一次')
getUser().then(res =>{
setToken(res.access_token)
})
router.push('/')
}).catch(function(e) {
console.log(e);
});
})
</script>
第五步、配置路由守卫
这里简单的配置一下
import { login } from '@/utils/oidc'
router.beforeEach(async (to, from, next) => {
const token = localStorage.getItem('token')
if(token == null && to.path != "/callback"){
login()
}else{
next()
}
})
到这里就基本完成了,下面测试一下。
第六步、测试
创建 Home.vue 页面
<template>
<div>
<el-button @click="logins">登录</el-button>
<el-button @click="getToken">获取token</el-button>
<el-button @click="logOut">退出</el-button>
</div>
</template>
<script setup>
import { getUser,login,logout } from '@/utils/oidc'
const logins = () =>{
login()
}
const getToken = () =>{
getUser().then(res =>{
console.log(res)
})
}
const logOut = () =>{
logout()
}
</script>
完成