当前位置:首页 > 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中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是…

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现popup

vue实现popup

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

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…