【微信小程序】wx.login实现用户登录

这篇具有很好参考价值的文章主要介绍了【微信小程序】wx.login实现用户登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【实现功能】

之前用手机号授权的方式实现登录,现在重新整理成笔记

【实现原理/步骤】

 一、wx.login

(1)前端通过wx.login()获取登录凭证code,每次调用的code均不同,有效时间5分钟,每个code可验证一回

(2)前端通过wx.request(我这里是用封装好的request.login)将code发送给后端

(3)后端将appid,appSecret(密钥)和code发送给微信接口服务去校验登录凭证,成功后会返回session_key(会话信息记录)和openid(用户唯一标识)

ps:前面的 appid,appSecret(密钥)可以在微信公众号平台获取

(4)用户登录成功后,后端将openid和session_key保存,生成一个自定义登录态的token(令牌)响应回去给前端。

(5)通过token可以查询openid和session_key,前端将返回的token进行缓存,小程序下次请求只要携带着token就可以证明已经登录。

(6)在app.js中检测用户是否已经登录

pages/login/login.js

onLoad() {

    wx.login({

      // 调用接口获取登录凭证(code)

      success: (Result) => {

        // 向后台发起request.login请求,用code换取用户登录态信息openid,存储为token;

        request.login({

          code: Result.code

        }).then((token) => {

          // 存储用户登录态信息token

          wx.setStorageSync('token', token)

        }) .catch(error => {

          console.log("换取登录态token失败:",error)

        });

      },

      fail:(res)=> { console.log("获取登录凭证code失败!",res) }

    }) 

  },

app.js

App({

  //配置全局变量(多页面使用)
  globalData: {
    // 登录信息
    token: ''
  },

// 登录检测:token
checkLogin() {

  //全局变量或缓存中存在token,直接赋值,否则重新登录
  var token = this.globalData.token
  if (!token) {
    token = wx.getStorageSync('token')
    if (token) {
      this.globalData.token = token;

    } else {
      wx.showToast({
        title: '请登录',
        icon: 'none'
      })

      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/login/login',
        })
      }, 2000);
    }
  }
},

  onLaunch() {
      // 登录检测:token
      this.checkLogin(),
  },
})

 

微信小程序实现用户登录(详)_微信小程序登录_灵魂学者的博客-CSDN博客

二、一键获取用户微信手机号并登录


(1) getUserInfo 

微信官方修改了 getUserInfo 接口,所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 去触发。

(2)button触发

步骤1:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,通过 bindgetphonenumber 事件获取回调信息;

步骤2:将 bindgetphonenumber 事件回调中的动态令牌code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号。每个code有效期为5分钟,且只能消费一次。

ps:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。

 pages/login/login.js

 // 二、一键登录获取手机号和token
  getPhoneNumber(e) {
    let that = this
    if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
      // 用户拒绝手机号授权
      wx.showToast({
        title: '以游客身份进入',
        icon: 'error'
      })
      setTimeout(() => {
        wx.switchTab({
          url: '/pages/home/home',
        })
      }, 2500)
    } else {
      //同意授权,保存手机号解密所需的code
      wx.showToast({
        title: '您已经同意授权登录',
      })
      this.setData({
        PhoneNumberSecret: e.detail.code,
      })
      
      if(e.detail.code && this.data.OpenId){
      
          // 手机号解密的promise请求
          request.getPhoneNumber({
            Code: that.data.PhoneNumberSecret,
            OpenId: that.data.OpenId
        }).then((res) => {
          
          wx.setStorageSync('phoneNumber', res.data)
          
        }).catch(error => {
          console.log("request.getPhoneNumber请求失败:",error)
          })
      }
      }        
  },

注意

从基础库2.21.2开始,对步骤2中换取手机号信息的方式进行了安全升级,上述为新方式使用指南。(旧方式目前可以继续使用,但建议开发者使用新方式,以增强小程序安全性)另外,新方式不再需要提前调用wx.login进行登录

参考链接:https://blog.csdn.net/cheng2290/article/details/102550829/

官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html


原文链接:https://blog.csdn.net/qq_33514421/article/details/81706299 文章来源地址https://www.toymoban.com/news/detail-713941.html

到了这里,关于【微信小程序】wx.login实现用户登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序中wx.login()获取到的openid、unionid、session_key含义及用处

    openid: 微信公众平台对用户的唯一标识 unionid: 同一个微信开放平台下的用户唯一标识 session_key: 会话密钥 可理解成1个微信用户打开1个微信公众号大门的唯一的1把钥匙 同一组织(企业)注册的不同类型公众平台,被看作是多个不同的账号 所以,当小明同学同时注册了统一企业的

    2024年02月02日
    浏览(33)
  • 微信小程序实现用户登录(详)

            * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载         用户登录是微信小程序的重要内容,那么今天就讲用户登录的一个流程,当然微信官方文档也有相关的一个登录流程图,这里也给大家附上地址:官方 | 小程序登录 。       用户登录流程可

    2024年02月03日
    浏览(25)
  • 【微信小程序】使用微信API获取用户信息实现登录

    实现步骤 1. 通过定义button按钮点击事件,点击登录后触发事件 2. 通过 wx.getUserProfile API 调用用户信息 3. 获取成功就将数据存储到本地存储中,使用 wx.setStorageSync(\\\'user\\\', user) 4. 存储完获取本地数据 wx.getStorageSync(\\\'user\\\') 5. 页面渲染数据 实现登录 wxml页面 js页面  wxss页面

    2024年02月05日
    浏览(39)
  • spring boot3登录开发-微信小程序用户登录设计与实现

      ⛰️个人主页:     蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 登录流程 流程解析 具体实现 相关代码 说明 服务端 小程序端 写在最后 本文介绍了springboot开发微信小程序后端服务中,用户登录功能的设计与实现,坚持看完相信

    2024年03月18日
    浏览(41)
  • 微信小程序 wx.openSetting打开不显示,封装用户授权

            测试功能的时候,想要设置用户相册的功能,打开突然什么也没有,要么就是显示“个人信息与权限使用记录”,就连打印出来的 console.log(\\\"授权\\\",res.authSetting) 授权信息也是空的。         去社区翻回答都在扯皮,也没有准确的说法,只能去看文档了。 授权

    2024年02月14日
    浏览(43)
  • 微信小程序登录页验证与页面跳转(二) ---结合SpringBoot和MySQL实现多用户登录

    Spring Boot的开发环境如下: 1、IDEA:2020 2、JDK版本:1.8 3、MySQL 版本:8 代码如下(示例): 打开IDEA,新建项目: 这里选择Spring lnitializr: 在接下来的页面中进行如下配置: 进行下一步:选择SpringBoot的版本,这里选择的是2.7.14 然后: 设置项目所在路径和设置项目名称: 项

    2024年01月22日
    浏览(42)
  • 微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案

    半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返回昵称和头像值....需要用头像昵称获取能力去触发获

    2024年02月11日
    浏览(30)
  • Java后台实现网站微信扫码登录功能,获取用户openid,及微信用户信息(小程序码方案),关联微信小程序(个人主体小程序也可以)

    目录 前言 下面展示操作流程 注册微信小程序 通过后台获取小程序码 前端处理 时序图理解 方案实现步骤 前言 很多业务场景之下我们需要实现  微信扫码登录  的需求,如: 同步网站与小程序的用户数据 。 需要获取用户微信相关基本信息,如头像、id等 实例:小程序上的

    2024年02月02日
    浏览(43)
  • 微信小程序实现登录授权,并将获取到的用户授权信息存储到数据库中

    官方开发文档 注意:在实现授权登录时,不要使用测试号进行 wx.getUserProfile使用文档 config文件代码如下 路由模块 主要代码(如果不想多个文件,可以将wxuserHandle.wxuser这个位置内容替换为exports.wxuser的内容) 注意: 在返回token的字符串拼接时,Bearer 后面必须有一个空格 数据

    2024年02月10日
    浏览(39)
  • 用户登录案例练习(flask+微信小程序)

    目录 flask 微信小程序 1.项目后端步骤 具体步骤可参考flask官网:flask 中文网 (1)创建虚拟环境 (2)激活虚拟环境 (3)在虚拟环境里边安装Flask (4) 粘贴官网的最小flask代码 (5)启动flask服务 2.代码书写 3.运行flask测试  在index.wxml中添加用户登录的标签 在index.js书写函数

    2024年02月16日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包