当前位置:首页 > uni-app

uniapp 全局登录

2026-03-05 08:31:27uni-app

uniapp 全局登录的实现方法

在 uniapp 中实现全局登录功能,通常需要结合本地存储和全局状态管理。以下是几种常见的实现方式:

使用 Vuex 管理登录状态

安装 Vuex 并创建 store 模块管理用户登录状态:

// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    userInfo: null,
    isLogin: false
  },
  mutations: {
    login(state, userInfo) {
      state.userInfo = userInfo
      state.isLogin = true
      uni.setStorageSync('userInfo', userInfo)
    },
    logout(state) {
      state.userInfo = null
      state.isLogin = false
      uni.removeStorageSync('userInfo')
    }
  }
})

export default store

封装全局登录方法

在 main.js 中挂载全局方法:

// main.js
import store from './store'

Vue.prototype.$login = {
  checkLogin() {
    return store.state.isLogin || uni.getStorageSync('userInfo')
  },
  getUserInfo() {
    return store.state.userInfo || uni.getStorageSync('userInfo')
  }
}

路由拦截实现自动登录

在 pages.json 中配置需要登录的页面路由,并在 App.vue 中检查登录状态:

// App.vue
export default {
  onLaunch() {
    const userInfo = uni.getStorageSync('userInfo')
    if (userInfo) {
      this.$store.commit('login', userInfo)
    }
  }
}

封装请求拦截器

在请求拦截器中自动添加 token:

// utils/request.js
uni.addInterceptor('request', {
  invoke(args) {
    if (Vue.prototype.$login.checkLogin()) {
      args.header = {
        ...args.header,
        'Authorization': 'Bearer ' + Vue.prototype.$login.getUserInfo().token
      }
    }
    return args
  },
  fail(err) {
    console.log('interceptor-fail', err)
  }
})

登录过期处理

在响应拦截器中处理 token 过期:

uniapp 全局登录

uni.addInterceptor('request', {
  success(args) {
    if (args.statusCode === 401) {
      uni.showToast({
        title: '登录已过期',
        icon: 'none'
      })
      store.commit('logout')
      uni.reLaunch({
        url: '/pages/login/login'
      })
    }
    return args
  }
})

注意事项

  • 敏感信息如 token 建议使用加密存储
  • 退出登录时要清除所有相关存储
  • 需要处理多端同步问题,特别是 App 和 H5 端
  • 建议配合后端实现 token 刷新机制
  • 生产环境需要增加更完善的错误处理逻辑

以上方案可根据实际项目需求进行组合或调整,实现适合业务场景的全局登录功能。

标签: 全局uniapp
分享给朋友:

相关文章

uniapp消息推送

uniapp消息推送

uniapp消息推送实现方法 uniapp支持多种消息推送方式,包括uniPush、个推、极光推送等。以下为常见实现方案: uniPush(官方推荐) uniapp官方提供的推送服务,基于DClou…

uniapp 极光推送

uniapp 极光推送

uniapp 集成极光推送的方法 在 uniapp 中集成极光推送,需要使用官方提供的插件或自行封装原生模块。以下是具体实现方式: 使用官方插件 在 uni-app 插件市场搜索「极光推送」插件,…

uniapp怎么启动

uniapp怎么启动

启动UniApp项目的步骤 确保已安装Node.js(建议版本12+)和HBuilderX(官方IDE)。若未安装,需先下载并配置环境。 安装开发工具 从HBuilderX官网下载对应操作系统的版本…

uniapp树形选择

uniapp树形选择

uniapp树形选择实现方法 使用uni-data-checkbox组件 uniapp内置的uni-data-checkbox组件支持树形结构选择,适用于多级分类场景。配置时需要将数据格式化为树形结构…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

uniapp get

uniapp get

uniapp 获取数据的方法 在 uniapp 中获取数据可以通过多种方式实现,包括 API 请求、本地存储、页面传参等。以下是一些常见的方法: API 请求获取数据 使用 uni.request…