草庐IT

微信小程序基础入门---登陆实现

疾风小蜗牛 2023-04-13 原文

1、搭建登陆静态页面

2、登录鉴权

在用户填写完信息之后,点击登录按钮,调用登录接口,根据后台返回内容判断是否登录成功。

       在这里,当我们输入正确的账号和密码之后,后台提示我们登录成功,但是当我们在登录成功之后在调用,获取用户信息的方法的时候,发现提示还是当前用户未登录。这是为什么呢?

       这里我们后端采用的登录鉴权方式是通过cookie的方式进行的鉴权,即登录成功之后,后端会给我们cookie上增加一个JSESSIONID,这个JESSIONID就标识了当前登录用户的身份。

       在浏览器中,我们每次发送请求都会携带cookie,所以说在浏览器中我们登录成功之后就可以直接调用登录之后才能访问的接口。但是在小程序端,小程序默认不会帮我们在发送请求的时候带上cookie,这个时候就需要我们手动添加请求cookie了。

       所以,要实现登录鉴权就要在登录之后将返回值中的cookie保存到本地,并且在之后的每次发送请求时都带上cookie,才能实现登录鉴权。

下面是请求登录的函数(注意要将数据保存在全局中,为不同页面判断是否为登陆状态做准备)

export function login (username,password){

  return post('/api/login',{username,password,rememberMe:true})

}
changeLogin() {

    login(this.data.username, this.data.password).then(res => {

      if (res.data.code == 0) {

        // 登陆成功之后将cookies存入内存

        let cookie = res.cookies.join(';')

        // 判断包含JESSIONID之后进行持久化存储

        if (cookie.includes('JSESSIONID')) {

          // 有的话就把cookie存入内存

          wx.setStorageSync('cookie', cookie)

        }

        wx.showToast({

          title: '登陆成功',

        })

        // 登录之后将数据存入全局

        this.setData({

          userInfo: res.data.data,

          isLoagin: true

        })

        app.globalData.isLoagin = true

        app.globalData.userInfo = res.data.data

      } else {

        wx.showToast({

          icon: 'error',

          title: res.data.msg,

        })

      }

    })

  },

在每次发送请求的时候,在请求头中添加上cookie属性。这里由于我们进行了封装,所以每次发送请求都会执行我们封装好的request方法,我们可以在这里给所有的接口加上cookie

function request(options) {

  // 请求拦截器

  //  ...

  // 1. 加一些统一的参数,或者配置

  if (!options.url.startsWith("https://") && !options.url.startsWith("http://")) {

    options.url = "https://showme2.myhope365.com" + options.url

  }

  // 默认的请求头

  let header = {

    "content-type": "application/x-www-form-urlencoded",

    // 加上统一的cookie

    "cookie": wx.getStorageSync('cookie') || ''

  };

  if (options.header) {

    header = {

      ...header,

      ...options.header

    }

  }



  return new Promise((reslove, reject) => {

    // 调用接口

    wx.request({

      // 默认的配置

      // 加载传入的配置

      ...options,

      header,

      success(res) {

        // 响应拦截器,所有接口获取数据之前,都会先执行这里

        //  1. 统一的错误处理

        if (res.statusCode != 200) {

          wx.showToast({

            title: '服务器异常,请联系管理员',

          })

        }



        reslove(res)

      },

      fail(err) {

        reject(err)

      }

    })

  })

}



export function get(url, options = {}) {

  return request({

    url,

    ...options

  })

}



export function post(url, data, options = {}) {

  return request({

    url,

    data,

    method: "POST",

    ...options

  })

}



3、判断登陆状态

页面加载完成后判断

       现在我们已经实现了登录功能,但是这里的cookie是有可能会过期的,,所以这里就涉及到了用户登录状态的记录。

       我们可以通过调用获取用户详情的接口来判断当前登录状态是否过期。

登录完成后判断

登录完成后判断一下是否把信息存贮上,所以判断一下登录状态。

加载我的页面判断

并且对于未登录的用户,单击我的页面应该显跳转到登录界面,对于已经登录的用户一上来可能需要显示用户信息界面。

由于在多个页面中都要判断登录状态,所以在全局App.js中调用接口最合适不过了,把获取到的数据放在全局对象globalData属性中,别的页面可以通过getApp().globalData使用判断即可。

先在globalData自定义一个isLogin属性,当为true是登录成功,false是为未登录。再自定义一个user属性,放置用户的信息。

4、解决异步问题

下面是app.js 文件内容,globalPromise属性是为了解决异步问题

// app.js

import {getUserInfo} from './api/user'



App({

  onLaunch() {

    // 每次进入页面,都去判断是否已经登陆

    this.globalData.loginPromise = getUserInfo().then(res=>{

      if (res.data.code==0) {

        console.log('已登陆');

        this.globalData.isLoagin = true,

        this.globalData.userInfo = res.data.data

      }else{

        console.log('未登录');

        this.globalData.isLoagin = false,

        this.globalData.userInfo = null

      }

    })

  },

  globalData: {

    userInfo: null,

    isLoagin:false,

    loginPromise:null

  }

})

有关微信小程序基础入门---登陆实现的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  7. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  8. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  9. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  10. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

随机推荐