Django实战-服务端登录验证-code换取openid

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

在知道小程序授权登录流程之后,按照每个步骤编写授权的业务代码。完成了小程序端的授权登录,需要将 code 通过 POST 请求传给服务端,再用appid,secret,js_code分别替换如上接口地址的APPID、SECRET、JSCODE,其它不变,组装成完整的地址。

https://api.weixin.qq.com/sns/jscode2session?appid=appid&secret=secret&js_code=code&grant_type=authorization_code

在去请求接小程序登录的接口地址前,需要先了解一个知识点。后端通过JSON web token方式登录,把token和用户id传回小程序。那问题就来了,用什么来存储 token,Django 的项目一般都是视图+模板一套出来,像这种不通过模板的值,该如何传递呢?

一、Session保存会话数据

Session和Cookie的关系是什么?

Session是基于Cookie, 是因为把数据写入session时将会生成一个随机字符串,并将随机字符串存入cookie,再读取时,是先从cookie中获取这个随机字符串,在去获取session内容。在SessionMiddleware中的process_request方法里面可以看到。

二、服务端登录验证

流程

1.使用微信小程序登录和获取用户信息Api接口

2.把Api获取的用户资料和code发送给django后端

3.通过微信接口把code换取成openid

4.后端将openid作为用户名和密码

5.后端通过JSON web token方式登录,把token和用户id传回小程序

6.小程序将token和用户id保存在storage中

下次请求需要验证用户身份的页面时,在header中加入token这个字段

在前面一小节中,介绍了前两步Django实战-小程序服务端登录验证-上

③ 微信接口把code换取成openid

Session就是保存了会话里面的数据,通过request.session进行获取。

导入 json、requests 模块,将APPID、SECRET、JSCODE,组装成完整的地址。通过requests 的 GET 请求换取用户openid。

import json
import requests
def code2session(appid, code):
    API = "https://api.weixin.qq.com/sns/jscode2session"
    params = "appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" % \
             (appid, settings.WX_APP_SECRET, code)
    url = API + "?" + params
    response = requests.get(url=url)
    data = json.loads(response.text)
    return data

原文发布于微信公众号 - 数据云团(SmartData)

原文发表时间:2019-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券