小程序登录,后台接口

  1. 通过wx.login 获取微信返回token:
    image
  2. 安装异步请求request包(和axios是同类)
    cnpm i request –S
    在小程序端通过wx.login获取code(在小程序端不要使用他,code是一次性的)
  3. 在后端需要请求微信官方的接口,把code和appid秘钥等等传给微信官方,等待微信官方返回openid。也就是用户身份信息
    image 

  4. 如果返回的字段带有  errcode:"40016",就是说明 wx.login返回的token已经过期:
    image
  5. 如果返回的是 openid, 则获取信息正确.
    前端微信用户登录即注册,所以在登录前需要判断有无此用户,如若无,则新增一位前台用户,再执行登录
     image
  6. 但是现在返回的openid是一个 明文的信息 ,  所以需要使用 jwt来加密token
    image
    此时的token已经被加密
  7. 代码:
  8. var express = require('express');
    var router = express.Router();
    var models = require('../../models')
    const request = require('request');// 用来请求接口
    var jwt = require('jsonwebtoken');// 加密
    
    router.post('/login',function(req,res,next){
        var code = req.body.code
        request.get({
            url:'https://api.weixin.qq.com/sns/jscode2session',
            json:true,
            qs:{
                grant_type:'authorization_code',
                appid:'wx4a9965771e11b4bd',
                secret:'e94f1c12cb09e31bff0f12826f945b60',
                js_code:code
            }
        },async(err,respose,data)=>{
            //  1. 判断data里面有没有 errcode,有就是token过期了,直接return
            if(data.errcode){
                return res.json({success:false,msg:'code已过期'})
            }
            // 2.否则就  查询openid存不存在
            let user = await models.User.findOne({
                where:{openid:data.openid}
            })
            // 3.如果openid不存在,就直接添加这个openid 和 普通权限
            if(!user){
                user = await models.User.create({openid:data.openid,admin:0})
            }
            var token = jwt.sign({
                user:{
                    id:user.id,
                    openid:data.openid,
                    admin:false
                }
            },process.env.SECRET,{expiresIn:60 * 60 * 24 * 7})
            res.json({success:true,message:'登陆成功',token:token})
        })
    })
    
    module.exports = router;
posted @ 2020-06-19 22:22  飞鸟和蝉-  阅读(923)  评论(0编辑  收藏  举报