小程序 登录状态检测

文章介绍了在小程序中如何通过本地存储的token判断用户登录状态。当用户未登录时,重定向到登录页,登录后返回原访问页面。通过封装名为authorization的组件进行鉴权,根据token存在与否控制页面渲染,并在无token时利用地址参数将当前页面传递给登录页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当某些页面要求用户必须是登录状态才能访问,通过来封装一些逻辑来检测用户是否是登录状态,如果不是则重定向到登录页,等用户完成登录后再跳转到用户本来要访问的页面。

通过本地存储的 token 来判断用户的登录状态

在小程序启动时读取本地存储并记录到应用实例当中,方便其它页面全局访问:


// app.js  应用实例

App({
  globalData: {},

  // 用户token
  token: "",

  // 获取token
  getToken() {
    wx.getStorage({
      key: 'enjoy_token',
      success: (result) => {
        this.token = result
      },
    });
  },

  // 存储token
  setToken(token) {
    this.token = `Bearer ${token}`
    wx.setStorageSync('enjoy_token', token);
  }
})

封装鉴权组件

小程序中不支持路由拦截,可以采取封装组件的方式实现,对需要鉴权的页面,使用自定义组件,传递到自定义组件,组件内部使用插槽接收,通过判断有无token,来实现是否渲染。

主要的步骤:

1.封装名称为 authorization 的组件


<!-- authorization组件  wxml中 -->

<slot wx:if="{{isLoginFlag}}"></slot>

2.在app.json注册为全局

{
  ...
  "usingComponents": {
    "authorization": "/components/authorization/index"
  }
  ...
}

3.在生命周期函数中读取全局中记录的 token 数据

优化:取当前页面的路径,在未登陆的情况下通过地址参数传给登录页面


// authorization 组件js中

Component({
  // 组件的初始数据
  data: {
    isLoginFlag: false
  },

  // 生命周期函数
  lifetimes: {
      
    // 组件生命周期函数 - 在组件实例进入页面节点树时执行
    attached() {
      // 通过应用实例获取token
      const token = getApp().token
      
      // 核心一:根据是否有token 判断登录状态 控制页面渲染
      this.setData({
          // !! 判断一个变量是否存在,返回一个布尔值
          // 或  token? true:false
          isLoginFlag: !!token
      })

      // 核心二:没有token跳回登录页
      if(!token){
          // 读取当前历史栈
          const pages = getCurrentPages()
          // 获取当前正在访问页面路由地址
          const page = pages[pages.length - 1]?.route
          wx.redirectTo({
          url:`/pages/login/indexredirectUrl=${page}`,
        })
      }     
    } 
  }
})

4.在需要登录才能访问的页面中,使用该组件


<-- 在需要登录才能访问的页面中,把结构传递给鉴权组件 -->

<authorization>
  <text>该页面需要登陆后查看</text>
</authorization>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不叫虎子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值