微信小程序cookies和session会话的使用
微信小程序cookies和session会话
最近由于业务需要在开发微信小程序,查阅帮助文档及社区,发现相关内容十分匮乏甚至官方的回复都模棱两可。
现存登录系统业务需求:当用户为已注册用户,则直接进入相关页面;若用户为未注册用户,则进入注册页面进行注册引导。
相关代码
小程序端登录代码
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId,serverIP为开发者服务器IP
console.log('wx code:' + res.code)
wx.request({
url: serverIP + '/get_login_code/',
data: { code:res.code },
header: { "Content-type": "application/json" },
method: 'POST',
success: function (res) {
console.log(res)
//在接收到返回数据中 会有cookies,保存。再下次发送数据时,头部添加cookie,
wx.setStorageSync('token', res.cookies[0])
},
fail: function (res) {},
complete: function (res) {},
})
}
})
在接收到返回数据中 会有cookies,保存。再下次发送数据时,头部添加cookie
//value.user_email等为注册信息,注意头部要加入上方保存的cookie
wx.request({
url: serverIP + '/regist_fromWX?user_email=' + value.user_email + '&user_name=' + value.user_name + '&user_telephone=' + value.user_telephone + '&user_type=' + value.user_type,
header: {
"Content-type": "application/json",
'cookie': wx.getStorageSync("token")
},
success(res) {
console.log(res)
}
})
服务器端用session来设置与读取,python代码
#接收登录信息函数
def get_login_code(request):
print(request.session.keys())
if request.method == "POST":
print(request.body)
pull_info = json.loads(request.body)
code = pull_info['code']
url = 'https://api.weixin.qq.com/sns/jscode2session'
params = {'appid': 'xxxxxxxx', 'secret': 'xxxxxxx', 'js_code': code,
'grant_type': 'authorization_code'}
result = get_method_request(url, params)
print(result)
result = json.loads(result)
user_type = ''
try:
#查找是否在表TestTable中
user_info = TestTable.objects.get(openid=result['openid'])
user_type = 'engineer'
except BaseException as e:
print(e)
print('no in Test table. ')
# 此处为cookies session写法,默认session数据库进行存储
if user_type != '':
_response = {'code':200,'user_type':user_type,'userInfoID':user_info.id}
return HttpResponse(json.dumps(_response))
else:
request.session['openid'] = result['openid']
request.session['session_key'] = result['session_key']
return HttpResponse('{"code":403}')
def get_method_request(url, params):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
}
response = requests.get(url=url, params=params, headers=headers).text
print(response)
return response
def regist_fromWX(request):
if request.method == "GET":
user_name = request.GET['user_name']
user_email = request.GET['user_email']
user_telephone = request.GET['user_telephone']
user_type = request.GET['user_type']
user_nickname = request.GET['user_nickname']
print(user_name, user_email, user_telephone, user_type, user_nickname)
print(request.session['openid'], request.session['session_key'])
try:
try:
#查找临时注册表值是否已存储此openid
aa = Regist_admin.objects.filter(openid=request.session['openid'])
print(aa[0].name)
print('repeat')
return HttpResponse('repeat')
except:
# 若临时注册表中无此openid,则保存此人进入临时注册表
Regist_admin(nickname=user_nickname, name=user_name, openid=request.session['openid'],
email=user_email,
telephone=user_telephone, types=user_type).save()
return HttpResponse('success')
except:
return HttpResponse('fail')
本文探讨了在微信小程序中实现登录系统的业务需求,通过获取并使用cookies配合服务器端的session来处理已注册和未注册用户的访问。文章指出当前关于此话题的文档不足,并分享了小程序端获取并使用cookies进行登录请求,以及Python Django服务器端session管理的代码示例。
3867

被折叠的 条评论
为什么被折叠?



