如何实现小程序的登录与授权(微信小程序如何实现授权登录)

网友投稿 1121 2022-09-30

如何实现小程序的登录与授权(微信小程序如何实现授权登录)

如何实现小程序的登录与授权(微信小程序如何实现授权登录)

程序员必备接口测试调试工具:立即使用Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具 后端、前端、测试,同时在线协作,内容实时同步

登录:

如果我们要实现小程序的登录,不妨尝试在开启小程序的时候完成登录。也就是说我们可以在app.js中的onlaunch方法中添加小程序登录代码。

如下:

//微信的登录方法wx.login({ success: res => { //登录成功后会返回一个微信端提供的 code ,用来自定义登录使用 console.log("code",res.code); //向自己的后台发送请求 wx.request({ url: this.globalData.URL+'login/', data:{ code:res.code }, header:{ "content-type": "application/json" }, method:"POST", success:function(e){ console.log(e) //请求成功后会返回一个自己后端生成的 token 用来做其他操作的校验,把token保存在本地 wx.setStorageSync("token", e.data.data.token) } }) // 发送 res.code 到后台换取 openId, sessionKey, unionId } })-

后端代码:

from rest_framework.views import APIViewfrom rest_framework.response import Responsefrom app01.wx import Wx_loginfrom django.core.cache import cachefrom app01 import modelsimport timeimport hashlibclass Login(APIView): def post(self,request): param = request.data if param.get("code"): #Wx_login是微信为我们提供的登录方法,这里的data已经有一个session_key和openid了 data=Wx_login.login(param.get("code")) if data: # 1 session_key+时间戳等到一个key.(md5 md5=hashlib.md5() md5.update(data.get("session_key").encode("utf8")) md5.update(str(time.time()).encode("utf8")) key=md5.hexdigest() #2 session_key与openid做绑定等到val val=data.get("session_key")+'&'+data.get("openid") #3key->val存到redis, cache.set(key,val) #4把openid存到数据库 user_data=models.Wxuser.objects.filter(openid=data.get("openid")).first() if not user_data: models.Wxuser.objects.create(openid=data.get("openid")) #5把key返回给小程序 return Response({"code": 200, "msg": "suc","data":{"token":key}}) else: return Response({"code": 202, "msg": "code无效"}) else: return Response({"code":201,"msg":"缺少参数"})-

Wx_login

import requests# appid={}&secret={}&js_code={}from app01.wx import settingsdef login(code): #code2Session是wx提供的url,填入你的appid和appsecret以及前端发送来的code url=settings.code2Session.format(settings.AppId,settings.AppSecret,code) reponse=requests.get(url=url) #得到的data里面有session_key和openid。 data=reponse.json() print(data) if data.get("session_key"): return data else: return False-

settings

#你注册的小程序的 appid 和 appsecret,code2Session是有官方提供的。pay_mchid是商铺号,需要工商证才能办理,所以自己没法搞。AppId="wx69a0dca5c6b02a43"AppSecret="9d0f80642f4861b53df04a2f7bd65a59"code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"pay_mchid ='1415981402'pay_apikey = 'xi34nu5jn7x2uujd8u4jiijd2u5d6j8e'-

这样登录就完成了

授权

luying: function () { //这个方法的作用是获取配置,看所有的权限 wx.getSetting({ //获取成功后进入 success(res) { console.log("res", res.authSetting['scope.record']) //authSetting是这个权限的列表,这一句是看里面有没有录音这个权限 if (!res.authSetting['scope.record']) { //没有权限的话就会走这一句,这个方法的作用是获取权限 wx.authorize({ //固定写法权限就是scope.xxx这样的 scope: 'scope.record', success() { // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 wx.startRecord() }, //在失败前就已经调用了上面的获取权限,如果没有给权限的话,就会走这个方法。 fail() { console.log("你没有授权") } }) } else { // wx.startRecord() } } }) },-

(学习视频分享:php视频教程)

获取用户信息的权限

因为用户信息可能会带一些敏感信息,比如说session_key或者openid等等,在前端想要获取信息的话,就必须请求权限。

需要注意,这种方式是错误的

用户信息-

获取用户信-

js

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Tungsten Fabric SDN — 与 Kubernetes 的集成部署(CN)
下一篇:springboot详解实现车险理赔信息管理系统代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~