赞
踩
vue项目使用oidc-client实现单点登陆
1、单点登录所需配置项:oidc.js
- export const identityServerBase = 'http://baidu.com';//目标服务器登录地址
- export const vueBase = 'http://localhost:8080'
-
- // 参考文档 https://github.com/IdentityModel/oidc-client-js/wiki
- export const openIdConnectSettings = {
- authority: `${identityServerBase}`,
- client_id: `vue-client`,
- redirect_uri: `${vueBase}/signin-oidc`,//这里是跳转回来的路由
- post_logout_redirect_uri: `${vueBase}`,
- silent_redirect_uri: `${vueBase}/redirect-silentrenew`,
- scope: 'openid profile api1',
- response_type: `id_token token`,
- automaticSilentRenew: true,
- };
2、我们需要在路由钩子页面增加判断,如果没有token,则重定向到服务器进行单点登录
permission.js
- import router from "./router";
- import Oidc from "oidc-client";
- import { openIdConnectSettings } from "./oidc";
-
- router.beforeEach((to,from,next)=>{
- //有token或者跳转到回调页面则直接执行
- if(localStorage.getItem('token') || to.path == '/callback'){
- next()
- }else{
- let mgr = new Oidc.UserManager(openIdConnectSettings);
- mgr.signinRedirect(); //执行重定向
- }
-
- })
这个是我自己的项目这样用router钩子来判断权限,如果你们没有用到也没关系,忽略掉router,直接执行else中的内容,如果没有token,页面会跳转到服务器进行登录
3、下面是登录完成后会回到我们系统中的操作
callback.vue(登录成功的回调页面)
- <template>
- <div></div>
- </template>
-
- <script>
- import Oidc from "oidc-client";
- import { openIdConnectSettings} from '../oidc.js'
-
- export default {
- props: {},
- data() {
- return {};
- },
-
- components: {},
-
- methods: {},
- created() {
- let userManager = new Oidc.UserManager(openIdConnectSettings);
- userManager.signinRedirectCallback().then(() => {
- userManager.getUser().then((user) => {
- if(user){
- localStorage.setItem('userInfo',JSON.stringify(user));
- localStorage.setItem('token', user.access_token);
-
- this.$router.push("/home");
- }else{
- userManager.signinRedirect(); //执行重定向
- }
- })
- })
- .catch(function(e) {
- console.error("CallBack 错误信息" + e);
- });
- }
- };
- </script>
4、执行回调后,跳转到home页面(系统首页),至此整体流程结束。
源码地址: https://gitee.com/maxiaoqu/vue-oidc
参照网址:https://blog.csdn.net/qq_39771254/article/details/107672684
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。