Python flask实战订餐系统微信小程序-34优化登录接口返回token

wechat xuhss 684℃ 0评论

優化登錄接口返回token

如果code能够获取guid 就不需要一直调用授权的方法

所以 默认页面进去的时候就检测这个用户是否建立了绑定关系,,如果建立了,就显示上面那个View 没有注册就显示下面这个。

      <view class="bd">
        <view class="confirm-btn" bindtap='goToIndex'>
          <text >登录 - 1</text>
        </view>
        <button class="confirm-btn" open-type="getUserInfo" bindgetuserinfo="login">授权登录</button>
        <text class="copyright">@虚幻私塾 xuhss.com</text>
      </view>

在index.js定义变量

regFlag默认设置为TRUE表示已经注册

//login.js
//获取应用实例
var app = getApp();
Page({
  data: {
    remind: '加载中',
    angle: 0,
    userInfo: {},
    regFlag:true
  },

然后再index.whtml中 添加判断:

wx:if="{{regFlag==true}}"

      <view class="bd">
        <view class="confirm-btn" bindtap='goToIndex' wx:if="{{regFlag==true}}">
          <text >走吧,订餐去 - 1</text>
        </view>
        <button class="confirm-btn" open-type="getUserInfo" bindgetuserinfo="login"  wx:if="{{regFlag==false}}">授权登录</button>
        <text class="copyright">@虚幻私塾 xuhss.com</text>
      </view>

在app.js添加统一的域名处理

20210821083118 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

添加buildurl方法 管理url的創建,可以參考web/static/common.js

    getRequestHeader:function(){
        return {
            'content-type': 'application/x-www-form-urlencoded'
        }
    },
    buildUrl:function (path, params) {
        var url = this.globalData.domain+path;
        var _paramUrl = "";
        if (params) {
            _paramUrl = Object.keys(params).map(
                function (k) {
                    return [encodeURIComponent(k), encodeURIComponent(params[k])].join("=");
                }
            ).join("&")
            _paramUrl = '?'+_paramUrl
        }
        return url +_paramUrl
    }

定义一个方法 checkLogin判断是否已经登录:

20210821084042 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

这个方法在onload的时候调用:

onLoad:function(){
  wx.setNavigationBarTitle({
    title: app.globalData.shopName
  });
  this.checkLogin();
},

運行

可以看到提示500不存在 我們可以添加鏈接的响应

20210821084523 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

在common/libs下面创建member文件夹 创建一个memberService方法

20210821085147 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

以UserService为参考,定義一個獲取openid的方法:

import hashlib, base64,random,string,requests,json
from application import app

class MemberService():

    @staticmethod
    def geneAuthCode(member_info):
        m = hashlib.md5()
        str = r"%s-%s-%s" % (member_info.id, member_info.salt, member_info.status)
        m.update(str.encode("utf-8"))
        return m.hexdigest()

    @staticmethod
    def geneSalt(length = 16):
        keylist = [random.choice((string.ascii_letters+string.digits)) for i in range(length)]
        return ("".join(keylist))

    @staticmethod
    def getWeChatOpenId(code):
        url = 'https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code' \
            .format(app.config['MINA_APP']['appid'], app.config['MINA_APP']['appkey'], code)

        r = requests.get(url)
        res = json.loads(r.text)
        openid = None
        if 'openid' in res:
            openid = res['openid']
        return openid

member.py导入这个通用的memberService方法

from common.libs.member.MemberService import MemberService

調用方法獲取openid:

20210821090400 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

將生成salt的方法調用進來

20210821085608 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

创建后台接口:

产生一个token区分用户是否是登录的 在我们每一次用户登录小程序时候,将这个token带到后端请求来 返回给前端处理,就可以统一判断是否登录 后面我们就可以将这个token发送到API层判断是否是这个用户

@route_api.route( "/member/check-reg", methods = ['GET', 'POST'] )
def checkReg():
    resp = {'code': 200, 'msg': '操作成功', 'data': {}}
    req = request.values
    # app.logger.info(req)

    code = req['code'] if 'code' in req else ''
    if not code or len(code) < 1:
        resp['code'] = -1
        resp['msg'] = '需要code'
        return jsonify(resp)

    openid = MemberService.getWeChatOpenId(code)
    if openid is None:
        resp['code'] = -1
        resp['msg'] = '調用微信出錯'
        return jsonify(resp)

    # 判断是否注册过,没有注册就注册
    bind_info = OauthMemberBind.query.filter_by(openid=openid, type=1).first()

    if not bind_info:
        resp['code'] = -1
        resp['msg'] = '未绑定'
        return jsonify(resp)

    member_info = Member.query.filter_by(id=bind_info.member_id).first()
    if not member_info:
        resp['code'] = -1
        resp['msg'] = '没有查询到绑定信息'
        return jsonify(resp)

    token = "%s#%s"%(MemberService.geneAuthCode(member_info),member_info.id)

    return jsonify(resp)

login接口也改成返回tocken

20210821091837 - Python flask实战订餐系统微信小程序-34优化登录接口返回token

转载请注明:xuhss » Python flask实战订餐系统微信小程序-34优化登录接口返回token

喜欢 (0)

您必须 登录 才能发表评论!