一、微信小程序的一個(gè)重要需求就是獲取用戶(hù)會(huì)員管理,包括獲取用戶(hù)信息,用戶(hù)的登錄與注冊(cè)的功能,在平常的網(wǎng)頁(yè)開(kāi)發(fā)過(guò)程序我們沒(méi)有過(guò)多地關(guān)注通信與登錄保持問(wèn)題,一般是用戶(hù)登錄后用session來(lái)保持登錄,但在小程序中存在一個(gè)中間的轉(zhuǎn)發(fā)微信服務(wù)器,所以開(kāi)發(fā)過(guò)程程中稍有不同。
首先要講的就是登錄保持問(wèn)題,用戶(hù)訪問(wèn)后的session是以session_id來(lái)區(qū)分的,所以要訪問(wèn)的頭部中加入PHPSESSION的session_id的標(biāo)識(shí)符進(jìn)行傳遞,可以重新封裝request請(qǐng)求函數(shù),當(dāng)然還有post等方法可以自行封裝。
functionget_session_key(ur1,success,fail){
varsession_id=wx.getstorageSync('PHPSESSID');//本地取存儲(chǔ)的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);
},
})
}
二、在使用小程序的官方登錄接口進(jìn)行操作,在登錄的時(shí)候返回記錄的session值保存在本地?cái)?shù)據(jù)中。
wx.login({
success:function(res){
varcode=res['code'];
console.log('code:'+code)
//12.小程序調(diào)用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.
小程序調(diào)用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)
在服務(wù)端就是一系列的驗(yàn)證了,包括用戶(hù)信息解密等功能。
如果直接就這樣做登錄應(yīng)用,還是會(huì)存在問(wèn)題的,會(huì)面臨以下幾個(gè)問(wèn)題:
一是當(dāng)用戶(hù)點(diǎn)擊拒絕授權(quán)獲取用戶(hù)信息后,用戶(hù)將無(wú)法再次使用必須有登錄才能使用的功能,這樣肯定是不好的,所以還要檢測(cè)當(dāng)用戶(hù)沒(méi)有登錄時(shí)候要重新拉起授權(quán)同意讓用戶(hù)同意。
使用wx.openSetting({})來(lái)操作。
二是當(dāng)網(wǎng)絡(luò)處理相對(duì)比較慢時(shí),用戶(hù)不知道已經(jīng)登錄,再去點(diǎn)其他需要會(huì)員登錄的頁(yè)面的時(shí)會(huì)出現(xiàn)問(wèn)題,所以在獲取頁(yè)面的會(huì)員登錄請(qǐng)求時(shí)彈出登錄中的loding的界面讓用戶(hù)知道程序正在登錄中,登錄完成后關(guān)閉loding。wx.showLoading({title: '登錄中'}) wx.hideLoading()
三是當(dāng)用戶(hù)長(zhǎng)時(shí)間掛起一個(gè)頁(yè)面時(shí),會(huì)導(dǎo)致服務(wù)器的session過(guò)期而本地存儲(chǔ)的sessionid不存在,這樣用這個(gè)sessionid去獲取信息的時(shí)候就會(huì)出錯(cuò),所以還要加一層判斷操作。頁(yè)面加載的時(shí)候去檢測(cè)用戶(hù)的session值還是否有效,如果有效不操作,失效則再次去執(zhí)行登錄操作。onload和onshow都去執(zhí)行檢測(cè)用戶(hù)登錄session是否有效。
當(dāng)要獲取小程序用戶(hù)登陸的id里,l因?yàn)?a >小程序登錄是異步的,不能同步獲取當(dāng)前用戶(hù)id,要使用定時(shí)工具去不斷地輪詢(xún)看是否已經(jīng)登錄完成通過(guò)session_id來(lái)去獲取當(dāng)前用戶(hù)的id
//獲取用戶(hù)id
common.get_memberid(that)
get_memberid=setInterval(function(){
if(that.data.uid!=0){
clearInterval(get_memberid)
}else{
common.get_memberid(that)
}
網(wǎng)頁(yè)題目:微信小程序開(kāi)發(fā)-登錄處理
鏈接地址:http://m.newbst.com/news38/238938.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、App設(shè)計(jì)、網(wǎng)站改版、關(guān)鍵詞優(yōu)化、Google、用戶(hù)體驗(yàn)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)