小程序登录

Posted 飞鸟和蝉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序登录相关的知识,希望对你有一定的参考价值。

  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;

以上是关于小程序登录的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序实现微信登陆(TP5后端)

小程序各种功能代码片段整理---持续更新

Android获取各个应用程序的缓存文件代码小片段(使用AIDL)

提效小技巧——记录那些不常用的代码片段

导航 PopUpToInclusive 不起作用?重新打开应用程序时,它会打开登录片段而不是电子邮件登录片段

Android小部件,启动一个片段?