小程序的登录
Posted Rannie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序的登录相关的知识,希望对你有一定的参考价值。
小程序的登录
说明:
- 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
- 将 1 中的 code 发送到后端,调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
- 自定义登录状态,生成一个 key 与 openid 和 session_key 相绑定的字符串,把 key 返回到小程序中
- 小程序端保存,然后下次请求需要登录接口的时候,把 key 带上
注意:
- 会话密钥
session_key
是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。- 临时登录凭证 code 只能使用一次
自定义登录状态
//app.js App({ onLaunch: function () { let that = this // 登录 // wx.login() 获取 code wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId // console.log(res) wx.request({ url: that.globalData.baseurl+"login/", data:{"code":res.code}, method:"POST", success(e){ // console.log(e) wx.setStorageSync(\'token\', e.data.data.token) } }) } }) }, globalData: { userInfo: null, baseurl: "http://127.0.0.1:8000/" } })
后端,新建文件夹 wx ,在 wx 文件夹下创建 settings.py 文件和 wx_loging.py
settings.py
AppId = \'wxb662c1fdacbcb9426\' AppSecret = \'98e19d90eb1169a50e714122edd09b316\' code2Session = \'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code\'
wx_loging.py
from app01.wx import settings import requests def get_login_info(code): code_url = settings.code2Session.format(settings.AppId, settings.AppSecret, code) # 登陆接口校验 response = requests.get(code_url) json_response = response.json() if json_response.get(\'session_key\'): return json_response else: return False
views.py
class Login(APIView): def post(self, request): param = request.data if not param.get(\'code\'): return Response({\'status\': 1, \'msg\': \'缺少参数\'}) else: code = param.get(\'code\') user_data = wx_login.get_login_info(code) # {\'session_key\': \'0ghT3CyfdxXrT4FF6vaowQ==\', \'openid\': \'o_36qT4bcvwdtarkY4pzl0PfE35E\'} if user_data: val = user_data[\'session_key\'] + \'&\' + user_data[\'openid\'] md5 = hashlib.md5() md5.update(str(time.clock()).encode(\'utf-8\')) md5.update(user_data[\'session_key\'].encode(\'utf-8\')) key = md5.hexdigest() cache.set(key, val) has_user = Wxuser.objects.filter(openid=user_data[\'openid\']).first() if not has_user: Wxuser.objects.create(openid=user_data[\'openid\']) return Response({ \'status\': 0, \'msg\': \'ok\', \'data\': {\'token\': key} }) else: return Response({"status": 2, "msg": \'无效的 code\'})
自定义登录状态,生成一个 key 与 openid 和 session_key 相绑定的字符串,把 key 返回到小程序中
小程序端保存,然后下次请求需要登录接口的时候,把 key 带上
以上是关于小程序的登录的主要内容,如果未能解决你的问题,请参考以下文章
Android获取各个应用程序的缓存文件代码小片段(使用AIDL)