当前位置:首页 > uni-app

uniapp 全局登录

2026-02-06 06:45:42uni-app

全局登录的实现方法

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

使用Vuex管理登录状态

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

本地存储持久化

在App启动时从本地存储加载登录状态:

uniapp 全局登录

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

// 初始化时读取本地存储
const userInfo = uni.getStorageSync('userInfo')
if (userInfo) {
  store.commit('login', userInfo)
}

全局登录拦截

pages.json中配置需要登录的页面:

{
  "pages": [
    {
      "path": "pages/user/user",
      "style": {
        "navigationBarTitleText": "个人中心",
        "requiresAuth": true
      }
    }
  ]
}

main.js中添加全局路由拦截:

uniapp 全局登录

// 路由拦截
uni.addInterceptor('navigateTo', {
  invoke(e) {
    const pages = getCurrentPages()
    const page = pages[pages.length - 1]
    if (page.route === 'pages/user/user' && !store.state.isLogin) {
      uni.navigateTo({
        url: '/pages/login/login'
      })
      return false
    }
    return true
  }
})

封装登录方法

common目录下创建login.js

export function login() {
  return new Promise((resolve, reject) => {
    uni.login({
      provider: 'weixin',
      success(res) {
        // 获取用户信息
        uni.getUserInfo({
          provider: 'weixin',
          success(infoRes) {
            const userInfo = {
              ...infoRes.userInfo,
              code: res.code
            }
            store.commit('login', userInfo)
            resolve(userInfo)
          },
          fail: reject
        })
      },
      fail: reject
    })
  })
}

export function checkLogin() {
  return store.state.isLogin
}

全局混入登录检查

main.js中添加全局混入:

Vue.mixin({
  methods: {
    $checkLogin() {
      if (!this.$store.state.isLogin) {
        uni.navigateTo({
          url: '/pages/login/login'
        })
        return false
      }
      return true
    }
  }
})

注意事项

  • 用户敏感信息建议加密存储
  • 登录状态需要与服务端保持同步
  • 需要考虑token过期等异常情况
  • 不同平台可能有不同的登录实现方式

这些方法可以组合使用,根据项目需求选择适合的方案。全局登录的核心是统一管理用户状态,并在需要时进行验证和拦截。

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

相关文章

uniapp请求超时处理

uniapp请求超时处理

uniapp请求超时处理方法 在uniapp中处理请求超时可以通过多种方式实现,以下是几种常见的处理策略: 设置全局请求超时时间 在main.js中配置全局请求超时时间,适用于所有请求: uni…

uniapp视频

uniapp视频

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

uniapp切片

uniapp切片

uniapp 切片实现方法 在 uniapp 中实现切片功能通常指的是对图片或数据进行分割处理。以下是几种常见的切片实现方式: 图片切片展示 通过 CSS 和 JavaScript 实现图片的网格化…

uniapp get

uniapp get

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

uniapp 录像

uniapp 录像

uniapp 录像功能实现 在uniapp中实现录像功能可以通过调用uni-app的API或结合第三方插件完成。以下是常见的实现方法: 使用uni.chooseVideo方法 uni.choose…

uniapp 摇杆

uniapp 摇杆

uniapp 实现虚拟摇杆的方法 在uniapp中实现虚拟摇杆功能,通常需要结合canvas绘制和触摸事件监听。以下是具体实现方案: 基础摇杆实现 创建canvas画布 在template中添加c…