当前位置:首页 > 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实现增删改

vue实现增删改

Vue 实现增删改查功能 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是使用 Vue.js 实现增删改查(CRUD)功能的方法。 数据初始化 在 Vue 实例的 data 中初始化一个…

vue实现皮肤切换

vue实现皮肤切换

实现皮肤切换的基本思路 在Vue中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是实…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue实现menu

vue实现menu

Vue 实现 Menu 的方法 使用 Element UI 的 Menu 组件 Element UI 提供了现成的 Menu 组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…