当前位置:首页 > VUE

vue单点登录实现

2026-01-16 20:20:39VUE

Vue 单点登录实现方案

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

使用 OAuth2.0/OpenID Connect 协议

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

安装 axios 用于网络请求:

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 中配置全局前置守卫:

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中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 29…

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独…