当前位置:首页 > 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中添加全局混入:

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应用市场概述 Uniapp作为跨平台开发框架,支持将代码编译到iOS、Android、Web及各类小程序平台。其应用市场(插件市场)是开发者获取扩展插件、模板、组件的重要资源库,涵盖UI组…

uniapp开发电视应用

uniapp开发电视应用

开发环境准备 确保已安装HBuilderX最新版本,这是uniapp官方推荐的开发工具。安装Node.js环境,用于依赖管理和打包构建。准备Android Studio或Xcode用于调试和打包TV应…

uniapp前端页面

uniapp前端页面

Uniapp 前端页面开发指南 Uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发,多端部署(H5、小程序、App等)。以下是开发 Uniapp 前端页面的关键方法和注意事项。…

uniapp实现标题栏渐变

uniapp实现标题栏渐变

实现标题栏渐变的方法 在UniApp中实现标题栏渐变效果,可以通过修改页面的导航栏样式或使用自定义导航栏来实现。以下是几种常见的方法: 方法一:使用原生导航栏渐变 通过修改pages.json…

海康 uniapp

海康 uniapp

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

uniapp 搜索

uniapp 搜索

uniapp 搜索功能实现方法 全局搜索组件集成 在pages.json中配置全局搜索栏,适用于所有页面顶部显示搜索框。示例代码: "globalStyle": { "navigationBa…