神剑山庄资源网 Design By www.hcban.com
之前用小程序做项目,因为后台使用的java开发,一切顺利,但切换成django做RESTful API接口时,在登陆注册时一直出现问题,网上搜索,借助一个网友的回答,找到了一种可行的解决方案,现记录如下。
具体流程
- 用户点击小程序页面上的登录授权认证
- 通过微信自带的认证获取code
- 调取登录接口,将code传入后台
- 后台拿到code调用微信接口获取openid等用户信息
- 后台将openid作为用户名,若存在则去校验用户信息,否则以此用户名创建新用户,密码随机生成
- 将校验结果或者创建信息返回给微信小程序端
- 根据返回的信息完成用户登录校验
django的用户权限认证
django有一套自己的完善用户模型,由于Django Auth自带的User模型字段有限,我们需要对其进行拓展(直接使用也可以)
nickname = models.CharField(verbose_name=u'昵称',max_length=50, blank=True) user_avatar = models.ImageField(verbose_name=u'用户头像', upload_to='image/%Y/%m/%d', default=u'image/default.png', max_length=500) user_email = models.EmailField(verbose_name=u'用户邮箱',max_length=254) user_phone = models.BigIntegerField(verbose_name=u'手机号', null=True,blank=True) user_birthday = models.DateField(verbose_name=u'出生日期', default = timezone.now) user_sex = models.CharField(verbose_name=u'性别',max_length=6,choices=(('male','男'),('female','女')),default='male') user_address = models.CharField(verbose_name=u'地址',max_length=550, blank=True,null=True) signature = models.CharField(verbose_name=u'个性签名',max_length=550, blank=True,null=True)
用户接口序列化
from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = "__all__"
登陆接口设计
class UserLogin(APIView): def post(self,request): params = request.data userName = get_openid(params.get('code')) userInfo = params.get('userinfo') try: user = User.objects.get(username = userName) except Exception as e: user = None if user: # 更新用户信息 user = User.objects.get(username = userName) else: #注册新用户 user = User.objects.create_user(username=userName,password=random_str(10)) #手动生成JWT # 手动生成token验证 jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER payload = jwt_payload_handler(user) token = jwt_encode_handler(payload) ret = {'code': '00000', 'msg': None,'data':{}} ret['msg'] = '授权成功' ret['data'] = { 'token': token, 'user_id': user.id, 'nickname': user.nickname } return JsonResponse(ret)
解析code获取openid
class OpenidUtils(object): def __init__(self, jscode): self.url = "https://api.weixin.qq.com/sns/jscode2session" self.appid = APPID self.secret = SECRET self.jscode = jscode # 前端传回的动态jscode def get_openid(self): url = self.url + "" + self.appid + "&secret=" + self.secret + "&js_code=" + self.jscode + "&grant_type=authorization_code" r = requests.get(url) openid = r.json()['openid'] return openid
小程序的登陆验证
具体登录流程可以查阅官方文档。
function getWXUserInfo() { const login = promisify(wx.login); const getUserInfo = promisify(wx.getUserInfo); return new Promise(function (resolve, reject) { _wxLogin(); function _wxLogin() { login().then(function (res) { getUserInfo().then(function (r) { let userInfo = r; userInfo.code = res.code; try { wx.setStorageSync('userInfo', userInfo); } catch (e) { console.log(e) } if (userInfo && userInfo.code && userInfo.iv) { resolve(userInfo); } else { reject('wx login fail'); } }).catch(function (error) { reject(error); }); }).catch(function (error) { reject(error); }); } }); } //登录接口验证 getWXUserInfo().then(function (data) { var result = { code: 0, data: {} }; var params = { 'code':data.code, 'userinfo':data.userInfo } wx.request({ url: '/api/login', data: params, dataType: 'json', method: 'POST', success: function (response) { // 返回成功 if (response.data && response.data.code == '00000') { try { var resData = { custNo: data.user_id, nickname: data.nickname }; result.code = 0; result.data = resData; resolve(result); } catch (e) { console.warn(result) // 登录失败 result.code = 2; resolve(result); } } else { // 获取 customNum 失败 console.warn(result) result.code = 1; result.data = 'get customNum fail'; resolve(result); } } }) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com
暂无django与小程序实现登录验证功能的示例代码的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年10月01日
2024年10月01日
- 孙悦.1996-伙伴【正大国际】【WAV+CUE】
- 纪钧瀚《钢琴阅读时光 雨中书店聆听轻音乐》[FLAC/分轨][399.62MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[320K/MP3][87.4MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[FLAC/分轨][184.94MB]
- 陈慧娴.2018-Priscilla-Ism演唱会3CD(2024环球红馆40复刻系列)【环球】【WAV+CUE】
- 郑秀文.1999-我应该得到(国)【华纳】【WAV+CUE】
- 陈家慧.2011-钢琴酒吧2CD【龙吟唱片】【WAV+CUE】
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[320K/MP3][45.01MB]
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[FLAC/分轨][109.13MB]
- 赞多《序章》[320K/MP3][45.54MB]
- 许巍.2004-每一刻都是崭新的【步升大风】【WAV+CUE】
- 群星.2024-四方馆影视原声带【韶愔音乐】【FLAC分轨】
- 陈雷.1997-安锁咧【金圆唱片】【WAV+CUE】
- 关淑怡.2013-MY.FAVORITE.SK.3CD【环球】【WAV+CUE】
- Sweety.2006-花言乔语【丰华】【WAV+CUE】