当前位置:首页 > VUE

vue单点登录实现

2026-01-16 20:20:39VUE

Vue 单点登录实现方案

单点登录(SSO)允许用户通过一次登录访问多个关联系统。以下是基于 Vue 的实现方案:

使用 OAuth2.0/OpenID Connect 协议

OAuth2.0 是常见的 SSO 实现标准,适合 Vue 作为前端框架与后端配合的场景。

安装 axios 用于网络请求:

vue单点登录实现

npm install axios

创建 auth.js 封装认证逻辑:

import axios from 'axios';

const authClient = axios.create({
  baseURL: 'https://sso-server.com'
});

export const login = () => {
  window.location.href = 'https://sso-server.com/oauth/authorize?response_type=code&client_id=vue-client&redirect_uri=' + encodeURIComponent(window.location.origin + '/callback');
};

export const handleCallback = async (code) => {
  const { data } = await authClient.post('/oauth/token', {
    grant_type: 'authorization_code',
    code,
    redirect_uri: window.location.origin + '/callback'
  });
  localStorage.setItem('access_token', data.access_token);
};

前端路由守卫验证

在 Vue router 中配置全局前置守卫:

vue单点登录实现

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!localStorage.getItem('access_token')) {
      login();
    } else {
      next();
    }
  } else {
    next();
  }
});

Token 刷新机制

实现 token 自动刷新避免频繁登录:

export const refreshToken = async () => {
  try {
    const { data } = await authClient.post('/oauth/token', {
      grant_type: 'refresh_token',
      refresh_token: localStorage.getItem('refresh_token')
    });
    localStorage.setItem('access_token', data.access_token);
    return true;
  } catch (error) {
    return false;
  }
};

跨域处理

在 vue.config.js 中配置代理:

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'https://sso-server.com',
        changeOrigin: true
      }
    }
  }
};

安全注意事项

  • 使用 HTTPS 确保传输安全
  • 将 token 存储在内存而非 localStorage 提高安全性
  • 实现 CSRF 防护机制
  • 设置合理的 token 过期时间

与后端配合要点

  • 确保后端正确配置 CORS
  • 统一认证中心的 session 管理
  • 各子系统共享相同的 cookie 域名或采用 token 传递方案

这种实现方式适用于中大型系统,小型系统可采用更简单的 JWT 方案。具体选择应根据项目规模和安全性要求决定。

标签: 单点vue
分享给朋友:

相关文章

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue翻页实现

vue翻页实现

Vue翻页实现方法 基础分页组件实现 使用v-for和计算属性实现基础分页逻辑: <template> <div> <ul> <li…

实现vue框架

实现vue框架

Vue框架的基本实现 Vue是一个渐进式JavaScript框架,用于构建用户界面。以下是实现Vue框架的基本步骤: 安装Vue 通过CDN引入Vue是最简单的方式: <script src…