当前位置:首页 > 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启动时从本地存储加载登录状态:

// 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中添加全局路由拦截:

// 路由拦截
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中添加全局混入:

uniapp 全局登录

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

注意事项

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

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

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

相关文章

vue  全局刷新实现

vue 全局刷新实现

全局刷新实现方法 在Vue中实现全局刷新通常涉及重新加载整个应用或特定路由。以下是几种常见方法: 使用window.location.reload() 强制浏览器重新加载当前页面: window.…

uniapp极光推送

uniapp极光推送

uniapp极光推送集成步骤 准备工作 注册极光推送开发者账号,创建应用获取AppKey。确保uniapp项目已配置好原生插件支持。 安装插件 在uniapp项目manifest.json文件中,选…

uniapp设置背景

uniapp设置背景

设置全局背景样式 在App.vue文件中添加全局样式,使用page选择器设置页面背景。这种方式会影响所有页面背景。 <style> page { background-col…

海康 uniapp

海康 uniapp

海康威视与UniApp集成方案 海康威视的硬件设备(如摄像头、NVR等)与UniApp结合,通常需要通过海康的开放平台API或SDK实现功能调用。以下是具体实现方法: 获取海康威视开放平台权限 注册…

任务 uniapp

任务 uniapp

uniapp 简介 Uniapp 是一款基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App、快应用等)。其核心优势在于代码复用率高,开发者可以通过一套代码适配多个…

uniapp 插槽使用

uniapp 插槽使用

uniapp 插槽的基本使用 插槽(Slot)是组件化开发中的重要特性,允许在组件内部预留位置,由父组件动态传入内容。uniapp 支持 Vue 的插槽语法,包括默认插槽、具名插槽和作用域插槽。 默…