返回顶部
首页 > 资讯 > 前端开发 > VUE >微信小程序中如何实现用户登录与登录态维护
  • 710
分享到

微信小程序中如何实现用户登录与登录态维护

2024-04-02 19:04:59 710人浏览 安东尼
摘要

小编给大家分享一下微信小程序中如何实现用户登录与登录态维护,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在微信小程序中,我们大致

小编给大家分享一下微信小程序中如何实现用户登录与登录态维护,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在微信小程序中,我们大致会涉及到以下三类登录方式:

  • 自有的账号注册和登录

  • 使用其他第三方平台账号登录

  • 使用微信账号登录(即直接使用当前已登录的微信账号来作为小程序的用户进行登录)

第一和第二种方式是目前WEB应用中最常见的两种方式,在微信小程序中同样可以使用,但是需要值的注意的是,小程序中没有Cookie的机制,所以在使用这2种方式前,请确认你们或第三方的api是否需要依赖Cookie;还有小程序中也不支持html页面,那些需要使用页面重定向来进行登录的第三方API就需要改造,或不能用了。

我们今天主要来讨论一下第三种方式,即如何使用微信账号进行登录,因为这种方式和微信平台结合最紧密,用户体验比较好。

登录流程

引用小程序官方文档的登录流程图,整个登录流程基本如下图所示:

微信小程序中如何实现用户登录与登录态维护
登录流程图

该图中,“小程序”指的就是我们使用小程序框架写的代码部分,“第三方服务器”一般就是我们自己的后台服务程序,“微信服务器”是微信官方的API服务器。

下面我们来逐步分解一下这个流程图。

步骤1:在客户端获取当前登录微信用户的登录凭证(code)

在小程序中登录的第一步,就是先获取登录凭证。我们可以使用wx.login()方法并得到一个登录凭证。

我们可以在小程序的App代码中发起登录凭证请求,也可以在其他任何Page页面代码中发起登录凭证请求,主要根据你小程序的实际需要。

App({
 onLaunch: function() {
 wx.login({
  success: function(res) {
  var code = res.code;
  if (code) {
   console.log('获取用户登录凭证:' + code);
  } else {
   console.log('获取用户登录态失败:' + res.errMsg);
  }
  }
 });
 }
})

步骤2:将登录凭证发往你的服务端,并在你的服务端使用该凭证向微信服务器换取该微信用户的唯一标识(openid)和会话密钥(session_key)

首先,我们使用wx.request()方法,请求我们自己实现的一个后台API,并将登录凭证(code)携带过去,例如在我们前面代码的基础上增加:

App({
 onLaunch: function() {
 wx.login({
  success: function(res) {
  var code = res.code;
  if (code) {
   console.log('获取用户登录凭证:' + code);

   // --------- 发送凭证 ------------------
   wx.request({
   url: 'https://www.my-domain.com/wx/onlogin',
   data: { code: code }
   })
   // ------------------------------------

  } else {
   console.log('获取用户登录态失败:' + res.errMsg);
  }
  }
 });
 }
})

你的后台服务(/wx/onlogin)接着需要使用这个传递过来的登录凭证,去调用微信接口换取openid和session_key,接口地址格式如下所示:

Https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

这里是我使用了node.js Express构建的后台服务的代码,仅供参考:

router.get('/wx/onlogin', function (req, res, next) {
 let code = req.query.code

 request.get({
 uri: 'https://api.weixin.qq.com/sns/jscode2session',
 JSON: true,
 qs: {
  grant_type: 'authorization_code',
  appid: '你小程序的APPID',
  secret: '你小程序的SECRET',
  js_code: code
 }
 }, (err, response, data) => {
 if (response.statusCode === 200) {
  console.log("[openid]", data.openid)
  console.log("[session_key]", data.session_key)

  //TODO: 生成一个唯一字符串sessionid作为键,将openid和session_key作为值,存入Redis,超时时间设置为2小时
  //伪代码: redisStore.set(sessionid, openid + session_key, 7200)

  res.json({ sessionid: sessionid })
 } else {
  console.log("[error]", err)
  res.json(err)
 }
 })
})

这段后台代码成功执行的话,就可以得到openid和session_key。这个信息就是当前微信账户在微信服务器那边的登录态了。

但是,为了安全方面的原因,请不要直接使用这些信息作为你小程序的用户标识和session标识回传到小程序客户端中去,我们应该在服务器端做一层自己的session,将这个微信账号登录态生成一个session id并维护在我们自己的session机制中,然后把这个session id派发到小程序客户端作为session标识来使用。

关于如何在服务器端做这个session机制,我们现在一般采用键值对存储工具来做,比如redis。我们为每个session生成一个唯一的字符串作为键,然后可以将session_key和openid作为值,存入redis中,为了安全,存入的时候还应设置一个超时的时间。

步骤3:在客户端保存sessionid

开发Web应用的时候,在客户端(浏览器)中,我们通常将session id存放在cookie中,但是小程序没有cookie机制,所以不能采用cookie了,但是小程序有本地的storage,所以我们可以使用storage来保存sessionid,以供后续的后台API调用所使用。

在之后,调用那些需要登录后才有权限的访问的后台服务时,你可以将保存在storage中的sessionid取出并携带在请求中(可以放在header中携带,也可以放在querystring中,或是放在body中,根据你自己的需要来使用),传递到后台服务,后台代码中获取到该sessionid后,从redis中查找是否有该sessionid存在,存在的话,即确认该session是有效的,继续后续的代码执行,否则进行错误处理。

这是一个需要session验证的后台服务示例,我的sessionid是放在header中传递的,所以在这个示例中,是从请求的header中获取sessionid:

router.get('/wx/products/list', function (req, res, next) {
 let sessionid = req.header("sessionid")
 let sessionVal = redisStore.get(sessionid)

 if (sessionVal) {
 // 执行其他业务代码
 } else {
 // 执行错误处理
 }
})

好了,通过微信账号进行小程序登录和状态维护的简单流程就是这样,了解这些知识点之后,再基于此进行后续的开发就会变得更容易了。

另外,腾讯前端团队也开源了他们封装的相关库,可以借鉴和使用。

服务器端库 weapp-session

小程序端库 weapp-session-client

以上是“微信小程序中如何实现用户登录与登录态维护”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: 微信小程序中如何实现用户登录与登录态维护

本文链接: https://lsjlt.com/news/70736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信小程序中如何实现用户登录与登录态维护
    小编给大家分享一下微信小程序中如何实现用户登录与登录态维护,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在微信小程序中,我们大致...
    99+
    2024-04-02
  • 微信小程序静默登录和维护自定义登录态详解
    目录1.背景2.什么是静默登录?3.如何维护自定义登录态4.静默登录整体流程4.1app.onLaunch中发起登录4.2处理小程序不支持异步阻塞4.2.1粗糙的方案4.2.2优雅的...
    99+
    2024-04-02
  • 利用java实现一个微信小程序登录态维护功能
    利用java实现一个微信小程序登录态维护功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。作为服务端,如果想获得到使用微信小程序的会员信息,就需要小程序作为客户...
    99+
    2023-05-31
    微信小程序 ava java
  • 微信小程序如何实现登录
    这篇文章主要为大家展示了“微信小程序如何实现登录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序如何实现登录”这篇文章吧。微信小程序 实现登录最近一段时...
    99+
    2024-04-02
  • 微信小程序中如何实现用户登录和授权
    在微信小程序中实现用户登录和授权的流程大致如下: 获取用户授权:在小程序中,需要使用wx.login()和wx.getUserI...
    99+
    2024-04-03
    微信小程序
  • 微信小程序实现token登录
    微信小程序实现token登录 微信小程序登录流程 前端先调用wx.login()接口获取code,再把code发个后端 login() { wx.login({ success: (res)...
    99+
    2023-09-07
    微信小程序 小程序 java
  • 微信小程序开发中如何实现登录
    这篇文章给大家分享的是有关微信小程序开发中如何实现登录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序开放平台先从我们的小程序代码开始简单的说一下我们小程序的js代码登录...
    99+
    2024-04-02
  • 微信小程序如何实现授权登录
    这篇文章给大家分享的是有关微信小程序如何实现授权登录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入...
    99+
    2024-04-02
  • 微信小程序如何实现登录页面
    这篇文章主要讲解了“微信小程序如何实现登录页面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何实现登录页面”吧!1. 在首页中加入一个弹窗作为登录窗口,效果如下图:(1)inde...
    99+
    2023-06-30
  • 微信小程序如何实现登录界面
    这篇文章主要介绍“微信小程序如何实现登录界面”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何实现登录界面”文章能帮助大家解决问题。注:这里使用的是原生微信小程序使用wxss和wxmlin...
    99+
    2023-06-30
  • 微信小程序中怎么实现登录
    今天小编给大家分享一下微信小程序中怎么实现登录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。业务流程:首先需要一个按钮触发事...
    99+
    2023-07-02
  • 【微信小程序】实现微信小程序登录(附源码)
    实现微信小程序登录 文章目录 实现微信小程序登录登录功能简介界面展示代码展示 登录功能简介 通过点击登录按钮,调用微信接口wx.getUserProfile拿到微信的个人信息,先检查是...
    99+
    2023-09-07
    微信小程序 小程序 微信 前端
  • 微信小程序实现登录界面
    微信小程序的登录界面实现,供大家参考,具体内容如下 <view class="container"> <view class="wrapper"> ...
    99+
    2024-04-02
  • Spring Boot实现微信小程序登录
    使用Spring Boot完成微信小程序登录 由于微信最近的版本更新,wx.getUserInfo()的这个接口即将失效,将用wx.getUserProfile()替换,所以近期我也...
    99+
    2024-04-02
  • 微信小程序实现登录页面
    本文实例为大家分享了微信小程序实现登录页面的具体代码,供大家参考,具体内容如下 实现在进入微信小程序首页前的登录验证页面,这里有两种方法,但其实原理都是一样的。 1. 在首页中加入一...
    99+
    2024-04-02
  • 微信小程序实现一键登录
    本文实例为大家分享了微信小程序实现手机号登录的具体代码,供大家参考,具体内容如下 项目需求 点击按钮获取用户电话号码绑定到后台,登录。 实现思路 1、使用微信开放功能为获取用户手机...
    99+
    2024-04-02
  • 如何实现微信小程序之授权登录
    这篇文章主要介绍如何实现微信小程序之授权登录,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实现思路自己写一个微信授权登录页面让用户实现点击的功能,也就是实现了通过 button 组件去触发 getUserInof...
    99+
    2023-06-14
  • 微信小程序如何实现手机号登录
    这篇文章主要讲解了“微信小程序如何实现手机号登录”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何实现手机号登录”吧!wxml<form bindsubmit=&q...
    99+
    2023-07-02
  • 微信小程序如何授权登录
    小编给大家分享一下微信小程序如何授权登录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!注:没有在微信开放平台做开发者资质认证的就...
    99+
    2024-04-02
  • 微信小程序实现授权登录之获取用户信息
    本文实例为大家分享了微信小程序实现获取用户信息的具体代码,供大家参考,具体内容如下 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作