微信小程序实现登陆功能

先上张图:

如果到这就完了,此时的你心里是不是:

这张图是从微信开发文档上抄来的,接下来我们结合案例一步一步实现微信授权登陆的功能。

第一步:调用wx.login获取code

代码:

  // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res)
      }
    })

第二步:后台通过code获取openid、sessionKey、unionId,这里我们用node搭建一个简易后台

1、openId: 用户在当前小程序的唯一标识

2、sessionKey:具体啥作用我也不明白,先不管

3、unionId:用户在所有小程序、公众号、APP的唯一标识

代码:

const express = require('express')
const bodyParser = require('body-parser')
const jwt = require('jsonwebtoken')
const axios = require('axios')
// 创建服务
const app = express()


// 创建路由
const router = express.Router()


// 登录
router.post('/api/login', (request, reponse) => {
  let wxCode = request.body.wxCode
  // 向微信服务器请求获取openid
  axios.request({
    url: 'https://api.weixin.qq.com/sns/jscode2session',
    method: 'get',
    params: {
      appid: '换成你的',    //小程序 appId
      secret: '换成你的',   //小程序 appSecret
      js_code: wxCode,      //登录时获取的 code
      grant_type: 'authorization_code'    //授权类型,此处只需填写 authorization_code
    }
  }).then(res => {
    // result就是我们拿到的session_key、openid、unionid
    let result = res.data.data
    reponse.send(result)
  })
})



app.use(bodyParser.json())
app.use(router)


app.listen(3000, (err) => {
    if(err) {
        console.log(err)
    }
    console.log('服务启动在3000端口')
})

通过上一步我们已经拿到openid、session_key,我们可以使用一些加密工具按照自己的规则来生成token返给前端,这里我们使用jsonwebtoken;

1、’secret‘:加密规则

2、expiresIn: token有效期

代码:

// result就是我们拿到的session_key、openid、unionid
    let result = res.data.data
    // 生成token
    let token = jwt.sign({ openid: result.openid, session_key: result.session_key}, 'secret', { expiresIn: 3600 * 24 * 7 })
    reponse.send({
      token
    })

第三步:前端请求接口获取token

代码:

// 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        wx.request({
          url: 'http://localhost:3000/api/login',
          method: 'POST',
          data: {
            wxCode: res.code
          },
          success: result => {
            console.log(result)
          }
        })
      }
    })

拿到token后可以放在本地缓存,在随后的业务逻辑中携带token传给后台,后台来校验token的有效性和时效性;

这里提一下。我们常见的业务场景是打开一个小程序,进行相关操作提示微信授权,其实它这里的一个微信授权登陆是用来获取用户信息的,并不是登陆用的,这个也根据业务场景来决定。

详细地址:https://huolihua.cn/#/article-detail/44l5uadw3vu00000

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值