小程序 登录流程

版权声明:有问题欢迎留言,转载请声明出处 https://blog.csdn.net/larger5/article/details/86410395

一、前言

自从小程序横空出世,公司的很多 app、pc 产品,都有了一个“体验版” —— 小程序。
小程序的后台,和其他端的基本一致,有如下几点不同:
① 使用 HTTPS 协议
② 登录多了解密流程

二、具体操作

1、小程序前端调用wx.login()方法,得到code、encryptedData、iv。将这三个发送后端。

2、后端执行两步:

(1)使用code、appid、appsecret调用微信api:
https://api.weixin.qq.com/sns/jscode2session?appid=&secret=&js_code=&grant_type=authorization_code

得到openid、session_key、unionid

(2)使用session_key和encryptedData解密得到用户信息

其中,encryptedData是Base64加密过的用户信息、session_key是密钥、iv是偏移量。

解密方法,如:

https://www.jb51.net/article/117352.html
https://www.cnblogs.com/itliucheng/p/5065619.html

3、将数据插入数据库,并返回给前端

三、几点说明:

1、session_key的处理:
openid就是微信用户id,可以用这个id来区分不同的微信用户
session_key则是微信服务器给开发者服务器颁发的身份凭证,开发者可以用session_key请求微信服务器其他接口来获取一些其他信息,由此可以看到,session_key不应该泄露或者下发到小程序前端。
redis中记录: openid、session_key键值对,当需要请求微信服务时,再通过session_key去请求。

2、UnionID机制说明
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

3、获取用户信息 正常返回值内容如下:

{
    openId: "oGZUI0egBJY1zhBYw2KhdUfwVJJE",
    nickName: "Band",
    gender: 1,
    language: "zh_CN",
    city: "Guangzhou",
    province: "Guangdong",
    country: "CN",
    avatarUrl: "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0",
    unionId: "ocMvos6NjeKLIBqg5Mr9QjxrP1FA",
    watermark: {
        timestamp: 1477314187,
        appid: "wx4f4bc4dec97d474b"
    }
}

如果返回字段中没有返回 unionId,需要将小程序和公众号绑定到同一开放平台才可以获取到

为保证同一个用户在APP/小程序等登录得到的信息一致,使用uuid作为微信平台的用户标识id

猜你喜欢

转载自blog.csdn.net/larger5/article/details/86410395