微信小程序实现用户登录(详)

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

微信小程序登录,微信小程序相关,微信小程序,javascript        * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载

        用户登录是微信小程序的重要内容,那么今天就讲用户登录的一个流程,当然微信官方文档也有相关的一个登录流程图,这里也给大家附上地址:官方 | 小程序登录 。

用户登录流程

      用户登录流程可以用这一句话简单概括:" 3个角色,4个步骤 ",3个角色就是" 小程序 ,开发者服务器 ,微信接口服务  ",4个步骤就是:其一小程序获取code,其二将code发送到开发者服务器,其三开发者服务器通过微信接口服务校验登录凭证 ,其四开发者服务自定义登录的状态。

微信小程序登录,微信小程序相关,微信小程序,javascript

        知道了对应的三个角色,同时要对四个步骤有一个基本的认识,那么上面提供了官方文档的链接,可以自己看文档也可以,看我的一个浅薄见解也行;首先小程序通过wx.login()获取登录凭证code,每次调用code均不同,有效时间是5分钟,该code被微信接口服务验证一次就会失效了,小程序获取到code之后,通过wx.request()将code发送到开发者服务器,开发者服务器将appid,appSecret(密钥),和code发送给微信接口服务去校验登录凭证,成功会返回session_key(会话信息记录)和openid(用户唯一标识),用户登录成功后,开发者服务器可以将openid和session_key保存,生成一个自定义登录态的token(令牌)响应回去给小程序,通过token可以查询openid和session_key,小程序下次请求只要携带着token就可以证明已经登录。


搭建开发者服务器 

        在实际开发中是去购买服务器的,那么这里仅限了解和搭建,那么就用本地localhost:3000作为服务器的端口,选用node.js来搭建开发者服务器 ,如何搭建大家可以看一下这篇内容学习如何搭建,这里就将初步搭建的代码放在这里,不过多的来介绍;

微信小程序搭载node.js服务器 (简)https://blog.csdn.net/weixin_52203618/article/details/124225264index.js 文件代码

const express = require('express') 				
const bodyParser = require('body-parser')		
const request = require('request')				
const app = express()

app.use(bodyParser.json())	

app.listen(3000, () => {
    console.log('server running ...');
})

        这里暂时不将所有的接口写完,等用到的时候我们再写,内容是一个循序渐进的过程。


步骤1:获取code

         小程序通过wx.login()获取登录凭证code,那么在微信开发者工具中创建一个名为Login的小程序,在这里要实现一个小程序启动时自动执行登录的操作,在app.js文件中来编写代码,可以在onLaunch中进行触发;

App({
    onLaunch:function(){
       this.login()  // 调用
    },
    
    login:function(){
        // wx.login()获取code
        wx.login({
            success:(res)=>{
                console.log("code: " + res.code);
            }
        })
    }
})

 以上就是获取code,此时可以在控制台上看到打印出来的code;

步骤二:将code发送到开发者服务器

通过wx.request()将code发送到开发者服务器

login:function(){
    // wx.login()获取code
        wx.login({
            success:(res)=>{
                console.log("code: " + res.code);
                wx.request({
                    url:'http://127.0.0.1:3000/login',
                    method:'POST',
                    data:{
                        code : res.code
                    }
                })
            }
    })
}

        在开发者服务器当中来个响应请求接口,请求的方式是post,那可以在index.js文件当中编写代码,这里如果你安装了nodemon的话可以不用重新启动,如果没有,则需要命令行重新输出node index.js重新运行。

// 写在app.listen即可
// '/login'即响应在小程序中的请求http://127.0.0.1:3000/login
app.post('/login',(req,res)=>{
    console.log('code: '+req.body.code) // 打印一下code
})

app.listen(3000, () => {
    console.log('server running...');
})

微信小程序登录,微信小程序相关,微信小程序,javascript

微信小程序登录,微信小程序相关,微信小程序,javascript

 可以看到小程序通过wx.request()的方式成功将code发送到开发者服务器上;

步骤三:通过微信接口服务校验

        开发者服务器将appid,appSecret(密钥),和code发送给微信接口服务去校验登录凭证,成功会返回session_key(会话信息记录)和openid(用户唯一标识);这时主要是编写开发者服务器当中的代码,在此之间需要开发者将自己的appid和appSecret密钥准备好,这里也给大家将如何获取到;

如何获取 appid(用户唯一标识),appSecret(用户密钥)?

登录微信小程序后台,登录之后,点击【开发】选项中的【开发管理】就可以看到; 微信公众平台 (qq.com)https://mp.weixin.qq.com/微信小程序登录,微信小程序相关,微信小程序,javascript

         现在编写开发者服务器当中的代码;有了code,appid,appsecret就可以进行微信接口服务校验了,附上这个官方链接用到复制即可,以防自己打错 auth.code2Session | 微信开放文档

// 开发者信息
const wx = {
    // appid:' ',  // 填写用户自己的appid
    // secret:' '  // 填写用户自己的密钥
}

// 写在app.listen即可
// '/login'即响应在小程序中的请求http://127.0.0.1:3000/login
app.post('/login',(req,res)=>{
    console.log('code: '+req.body.code) // 打印一下code
    // code,appid,secret都有了就发起请求到微信接口服务校验
    var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code'
    request(url, (err, response, body) => {
		//	可以获取到 session_key(会话信息) 、 openid(用户唯一标识)
        console.log('session: ' + body)
		//  上面的session信息是字符串数据,通过JSON.parse()转成js对象
        // var session = JSON.parse(body)
		console.log(session);
})

app.listen(3000, () => {
    console.log('server running...');
})

        成功之后会返回openid和session_key,openid是用户在这个小程序上唯一的id,不同小程序用户的id都不一样,session_key是用户的会话信息记录;将结果打印出来,可以在开发者服务器当中看到如下:

微信小程序登录,微信小程序相关,微信小程序,javascript

        以上就是校验成功之后所返回的session_key和openid;这里注意的是账户不得是测试的账户,否则获取不到code,获取不到code,则校验不能通过;

步骤四:开发者服务器自定义登录态

        通过校验成功后返回的session_key和openid进行保存,实际开发中,通常会使用数据库来保存数据,比如可以用MongoDB,这里就不搭建数据库来存数据,将其作为数据保存到我们的变量当中,如果后续有机会会专门做一期;openid是用户的唯一标识,所以可以判断session中是否存有openid,如果有我们才返回一个token回去,返回去的token不能是固定的,固定存在一定的分析,这时可以用这个时间戳生成token,当然再实际开发中是推荐使用比较成熟模块生成token,避免token被伪造带来不好的影响,这里我们就通过时间戳的方式来生成token给大家演示这个过程;

// 开发者信息
const wx = {
    appid:'',
    secret:''
}

// 模拟数据库存放数据
var db = {
	user: {},		// userInfo
    session: {}		// 保存 openid 和session_key会话信息 
}

app.post('/login', (req, res) => {
    // 注意:小程序端的appid必须使用真实账号,如果使用测试账号,会出现login code错误
    console.log('code: ' + req.body.code)
	// 接收code参数(req.body.code)
    var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code'
	request(url, (err, response, body) => {
        var session = JSON.parse(body)
		// 将openid和session_key保存后响应token回去,openid是用户的唯一标识
        // if(session.openid) {
			// 时间戳来生成token
            var token = 'token_' + new Date().getTime()  
            db.session[token] = session
			console.log(db);
            if(!db.user[session.openid]) {
                 db.user[session.openid] = {
                       state:1  // 成功登录可以获取
                 }
             }
        }
        res.json({
            token: token  // 返回token
        })
    })
})

微信小程序登录,微信小程序相关,微信小程序,javascript

        成功之后返回token,可以在小程序当中的wx.request()请求校验当中添加请求成功之后将返回的数据进行打印到小程序的控制台上;

login:function(){
...代码省略...
wx.request({
     url: 'http://127.0.0.1:3000/login',
     method:'POST',
     data:{ code:res.code },
     success:(res)=>{
     // 将请求成功的token打印
        console.log("token : " + res.data.token);
          }
     })
...代码省略...   
},

微信小程序登录,微信小程序相关,微信小程序,javascript

微信小程序登录,微信小程序相关,微信小程序,javascript

将返回到小程序的token进行一个缓存,小程序的下次请求时只要携带token,就可以证明用户已经登录,那么我们在进入小程序之前就需要将检查是否登录。

检查用户是否登录

         在检查用户登录之前,将返回的token进行数据缓存,token是公共数据,是多个页面当中需要用到的,可以定义为全局的globalData;数据缓存可以用wx.setStorage(),如果没用过的,这里提供官方文档,以及简单讲一下,主要是两个参数,一个是key,一个是data,这里不适用加密手段,了解基础使用,再琢磨加密吧。附上开发者文档的地址:wx.setStorage() | 微信开发文档

login:function(){
    // 1.wx.login()获取code
    wx.login({
      success:(res)=>{
        ....省略...
          success:(res)=>{
              console.log("token : " + res.data.token);

              // 将token保存为公共数据(多页面使用->全局globalData)
              this.globalData.token = res.data.token
              // 将token保存在数据缓存中(下次无需重新获取token)
              wx.setStorage({
                key:'token',
                data:res.data.token
              })

        ...省略...
  },
  globalData:{
    token:null
  }
})

可以查看是否已经缓存下来,打开控制台查看,如下图

微信小程序登录,微信小程序相关,微信小程序,javascript

检查用户登录

        上述内容将返回token缓存下来,那么检查的是否需要先从缓存当中看是否有token,如果有则可以请求服务器去检验token是否有效,如果没有token,则按照原来的方式去调用login()来获取token;

App({
  onLaunch:function(){
    // 检测用户是否登录
    this.checkLogin(res=>{
       console.log('is_login : ',res.is_login);
      // 未登录 -> login()
      if(!res.is_login){
        // 调用Login
        this.login();
       }
     })
  },
  // checkLogin()
  checkLogin:function(callback){
    var token = this.globalData.token
    if(!token){
      // 从缓存中获取token
      token = wx.getStorageSync('token')
      if(token){
        this.globalData.token = token
      }else{
        callback({ is_login : false })
      }
    }
  
    // 发送请求检验token是否存在
    wx.request({
      url: 'http://127.0.0.1:3000/checklogin',
      data:{
        token : token
      },
      success:(res)=>{
        console.log(res);
        callback({
          is_login:res.data.is_login
        })
      }
    }) 
  },
  ....省略....

开发者服务器代码编写 index.js

        响应接口请求,查询保存的数据库当中是否有该token的存在,判断取出的session是否为undefined,如是则表示token值已经失效了,如有缓存token且token有效则表示用户已经登录;

// index.js

...省略...

// 检查用户是否已经登录
app.get('/checklogin', (req, res) => {
    var session = db.session[req.query.token]
    console.log('checklogin: ', session)
    // 将用户是否已经登录的布尔值返回给客户端
    res.json({
        is_login: session !== undefined
    })
})

app.listen(3000, () => {
    console.log('server running...');
})

微信小程序登录,微信小程序相关,微信小程序,javascript

微信小程序登录,微信小程序相关,微信小程序,javascript微信小程序登录,微信小程序相关,微信小程序,javascript

         现在缓存当中有了token值,我们重新编译一下,此时缓存当中是有token值的,is_login的值为 true ,证明用户已经登录;

微信小程序登录,微信小程序相关,微信小程序,javascript

        以上就是这篇文章的内容,讲述微信小程序当中的一个重要环节用户登录的流程,小白和较为初级的比较适合,篇幅可能长了一些,感谢大家的支持!

微信小程序登录,微信小程序相关,微信小程序,javascript文章来源地址https://www.toymoban.com/news/detail-777654.html

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

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

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

相关文章

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

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

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

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

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

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

    2024年02月16日
    浏览(42)
  • 微信小程序登录,解决无法获取用户信息方法

    在上面的代码中,首先定义了应用的AppID和AppSecret。然后,实现了获取微信用户access_token的方法getAccessToken()和获取微信用户信息的方法getUserInfo()。其中,getAccessToken()方法需要传入微信小程序登录时获取的code,会返回一个包含access_token和openid的Map;getUserInfo()方法需要传入用户

    2024年02月11日
    浏览(66)
  • java对接微信小程序(登录&获取用户信息)

    用户通过小程序登录,进入到平台系统,进行各功能操作; 解决方案: 首先通过对接小程序,用户通过小程序登录及授权获取用户信息,后端调用接口获取微信用户信息,进行保存到数据库,然后返回token给前端(实际在这里相当于用户的一个注册及登录),前端使用该to

    2024年02月15日
    浏览(45)
  • 【微信小程序】如何获取用户手机号授权登录

    目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体),也就是说只针对企业认证小程序开放。若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。 在使用该接口时,用户可使用微信绑定手机号进行授权,也添加

    2024年02月16日
    浏览(75)
  • 用户登录 openid(微信小程序无师自通三)

    每一个微信小程序对应每一个用户都有一个固定的ID,这个ID就是openid。 博主想把“小汽车保养里程碑单机版”搬上微信小程序,第一件事情应该就是在小程序中能够识别不同的用户,每个用户自己保存自己的数据,需要一个唯一的识别号,就是这个openid。 先看看小程序官方

    2024年02月16日
    浏览(40)
  • 微信小程序中如何获取用户手机号授权登录

    随着微信小程序的普及,许多应用程序需要用户登录才能提供更好的服务。而获取用户手机号码是验证用户身份和确保账户安全的重要步骤之一。因此,在本文中,我们将介绍如何在微信小程序中实现手机号授权登录。 首先,在小程序后台开发设置中勾选“获取手机号”选项

    2024年02月11日
    浏览(106)
  • 微信小程序用户登录及头像昵称设置教程(前后端)

    目录 1.背景分析 2.具体需求分析 3.前端设计 3.1 用户登录 3.2 头像昵称填写(个人信息界面) 4.后端设计 4.1项目架构分析 4.2 代码分析 实体类 dao层 service层 controller层 工具类 5.nginx部署 6.效果演示 众所周知,微信小程序获取用户信息的接口经过了好几次调整,目前来说【 wx.

    2024年02月16日
    浏览(42)
  • 微信小程序获取用户的openid以及授权登录拿到用户头像及姓名

    在微信小程序中,往往需要将用户信息录入自己的数据库中,就得有一个唯一标记区分用户,这个标记就是openid。 我这里用云函数的方式,比较简单 先创建一个名为getOPenid的云函数  在云函数中获取微信调用上下文cloud.getWXContext  可选择性的返回openid、appid、unionid等,可详细查

    2024年02月12日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包