OETY欧亿|Home

135-2716-3909
网站建设资讯详细

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

发表日期:2026-07-10 09:33:55   作者来源:刘红旺   浏览:5212   标签:微信小程序开发    
一、微信小程□□□序的一个□□重要需求□□就是获取□□□□用户会员◉管理,包括获取□□□用户信息,用户的登□□□□录与注册◤的功能,在平常的□□□网页开发□□□过程序我□□们没有过□□□多地关注□□通信与登※录保持问□□□□题,一般是用□□户登录后◤用session来保持登☆录,但在小程□□序中存在□□□一个中间◆的转发微□□信服务器,所以开发□□□□过程程中□□稍有不同。
首先要讲□□□的就是登△录保持问□□题,用户访问□□后的session是以session_id来区分的,所以要访◢问的头部□□中加入PHPSESSION的session_id 的标识符□□进行传递,可以重新□□□封装request请求函数,当然还有post等方法可□□□以自行封□□□□装。
    function get_session_key(ur1,success,fail) { 
 
     var session_id = wx. getstorageSync('PHPSESSID');//本地取存储的sessionID
     if (session_id != ''  && session_id != null) {
        var header = { 'content - type':'application/-ww-form-urlencoded', 'Cookie': 'PHPSESSID='+ session_id }
    } else {
        var header = {'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) {
var code = res['code'];
console.log('code:'+ code)
//12. 小程序调用wx. getuserInfo得到rawData, signatrue, encryptData.
wx. getuserInfo({
success: function (info) {
//console. .1og(info);
var rawData = info['rawData'];
var signature = info['signature'];
var encryptData = info['encryptData'];
var encryptedData=info['encryptedData']; //注意是encryptedData不是encryptData.
var iv = info['iv'];
//3.小程序调用server获取token接口,传入code, rawData, signature, encryptData.
console.log(info['userInfo'])
var request_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)
  }
}, 500)
如没特殊注明,文章均为OETY欧亿原创,转载请注明来自https://www.hd-banhen.com/news/5959.html