微信小程序开发-登录处理

2023-02-22    分类: 网站建设

一、微信小程序的一个重要需求就是获取用户会员管理,包括获取用户信息,用户的登录与注册的功能,在平常的网页开发过程序我们没有过多地关注通信与登录保持问题,一般是用户登录后用session来保持登录,但在小程序中存在一个中间的转发微信服务器,所以开发过程程中稍有不同。
首先要讲的就是登录保持问题,用户访问后的session是以session_id来区分的,所以要访问的头部中加入PHPSESSION的session_id的标识符进行传递,可以重新封装request请求函数,当然还有post等方法可以自行封装。
functionget_session_key(ur1,success,fail){
varsession_id=wx.getstorageSync('PHPSESSID');//本地取存储的sessionID
if(session_id!=''&&session_id!=null){
varheader={'content-type':'application/-ww-form-urlencoded','Cookie':'PHPSESSID='+session_id}
}else{
varheader={'content-type':'application/x-wwu-form-urlencoded'}
}
wx.request({
url:url,
header:header,
success:function(res){
success(res);
},
fail:function(res){
fail(res);
},
})
}
二、在使用小程序的官方登录接口进行操作,在登录的时候返回记录的session值保存在本地数据中。
wx.login({
success:function(res){
varcode=res['code'];
console.log('code:'+code)
//12.小程序调用wx.getuserInfo得到rawData,signatrue,encryptData.
wx.getuserInfo({
success:function(info){
//console..1og(info);
varrawData=info['rawData'];
varsignature=info['signature'];
varencryptData=info['encryptData'];
varencryptedData=info['encryptedData'];//注意是encryptedData不是encryptData.
variv=info['iv'];
//3.小程序调用server获取token接口,传入code,rawData,signature,encryptData.
console.log(info['userInfo'])
varrequest_member_weixin_url=util.getApiurl(app,"/Member/weixin_api",'')
console.log(request_member_weixin_url);
wx.request({
ur1:request_member_weixin_url,
data:{
"code":code,
"rawData":rawData,
"signature":signature,
"encryptData":encryptData,
'iv':iv,
'encryptedData':encryptedData,
'userInfo':info['userInfo']
},
success:function(res2){
console.log('微信登录:'+res2.statuscode);
if(res2.statusCode!=200){
wx.showModal({
title:"登录失败"
});
}
}
})
//存入本地
wx.setstorageSync('PHPSESSID',res2.data.session_id)
//将thirdSessionId放入小程序缓存
wx.setStorageSync('session3rd',res2.data.session3rd)
在服务端就是一系列的验证了,包括用户信息解密等功能。
如果直接就这样做登录应用,还是会存在问题的,会面临以下几个问题:
一是当用户点击拒绝授权获取用户信息后,用户将无法再次使用必须有登录才能使用的功能,这样肯定是不好的,所以还要检测当用户没有登录时候要重新拉起授权同意让用户同意。
使用wx.openSetting({})来操作。
二是当网络处理相对比较慢时,用户不知道已经登录,再去点其他需要会员登录的页面的时会出现问题,所以在获取页面的会员登录请求时弹出登录中的loding的界面让用户知道程序正在登录中,登录完成后关闭loding。wx.showLoading({title: '登录中'}) wx.hideLoading()
三是当用户长时间挂起一个页面时,会导致服务器的session过期而本地存储的sessionid不存在,这样用这个sessionid去获取信息的时候就会出错,所以还要加一层判断操作。页面加载的时候去检测用户的session值还是否有效,如果有效不操作,失效则再次去执行登录操作。onload和onshow都去执行检测用户登录session是否有效。
当要获取小程序用户登陆的id里,l因为小程序登录是异步的,不能同步获取当前用户id,要使用定时工具去不断地轮询看是否已经登录完成通过session_id来去获取当前用户的id
//获取用户id
common.get_memberid(that)
get_memberid=setInterval(function(){
if(that.data.uid!=0){
clearInterval(get_memberid)
}else{
common.get_memberid(that)
}

分享标题:微信小程序开发-登录处理
浏览路径:https://www.cdcxhl.com/news/238938.html

成都网站建设公司_创新互联,为您提供App设计网站维护网站营销做网站商城网站定制网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站建设