上一篇的的的鏈接 賴(lài)了一個(gè)星期了,let us 接著上一篇的搞。
在上一篇里搞了一下基礎(chǔ)設(shè)施建設(shè),這一篇我們...稍微搞那么一丟丟上層建筑。
小程序登陸其實(shí)是個(gè)比較簡(jiǎn)單的基本操作,但凡是看過(guò)微信開(kāi)發(fā)文檔的應(yīng)該都能懂,不過(guò)本菜雞還是想嘗試性的分享一下。
首先先明確一下 為啥要用微信登陸 ,在本菜雞看來(lái)在這個(gè)項(xiàng)目里使用微信登陸主要有三個(gè)目的
然后,明確一下微信登陸過(guò)程中的幾個(gè)概念

然后,結(jié)合本次項(xiàng)目的實(shí)際情況捋一下微信登陸的流程
$url='https://api.weixin.qq.com/sns/jscode2session?appid='.$this->appId.'&secret='.$this->appSecret.'&js_code='.$code.'&grant_type=authorization_code'; 復(fù)制代碼
$wxResult=json_decode(curl_get($url),true);
if(!$wxResult||!array_key_exists('openid',$wxResult)){
return ResultService::failure('獲取openid不成功');
}
$openId=$wxResult['openid'];
復(fù)制代碼
其實(shí)獲得到openid微信登陸已經(jīng)差不多了,剩下就是怎么用的問(wèn)題了,下面的步驟是在本次項(xiàng)目的流程,供各位老哥參考
至此,本項(xiàng)目中微信登陸的流程搞完了。登陸完的結(jié)果就是,后臺(tái)新增或更新了用戶(hù)數(shù)據(jù),小程序端有了token。
本菜雞個(gè)人覺(jué)得常用的保持登陸狀態(tài)的方法有兩種
先說(shuō)第一種,也是本項(xiàng)目采用的方法,其實(shí)在上面的步驟5、6已經(jīng)把這個(gè)方法將清楚了,
第二種也在做網(wǎng)站用戶(hù)登陸的時(shí)候是非常常見(jiàn)的操作,在擼網(wǎng)站的時(shí)候,用戶(hù)登陸后把用戶(hù)信息存到session里,用戶(hù)在請(qǐng)求的時(shí)候能夠從session中取到用戶(hù)信息,之所以這樣是因?yàn)椋瑸g覽器請(qǐng)求服務(wù)器,服務(wù)器響應(yīng)時(shí),會(huì)帶一個(gè)sessionid回去給瀏覽器,瀏覽器下次請(qǐng)求時(shí)候會(huì)自動(dòng)帶著sessionid,服務(wù)器會(huì)根據(jù)sessionid來(lái)到相應(yīng)的會(huì)話(huà)里,所以能取到session中的用戶(hù)
BUT在小程序中有所不同,這是因?yàn)樾〕绦蚓W(wǎng)絡(luò)訪(fǎng)問(wèn)是用的微信封裝的wx.request,而該方法并不會(huì)把sessionid存下來(lái),因此,為了能和網(wǎng)站登陸搞成一個(gè)邏輯,我們手動(dòng)存一下sessionid,在下次請(qǐng)求的時(shí)候帶著sessionid去即可。
部分代碼如下
服務(wù)端(PHP)
//前面先搞登陸,登陸完了把用戶(hù)存到session里然后
return ResultService::success('',['sessionId'=>session_id()]);
復(fù)制代碼
小程序端
//登陸
dataUtils.userLogin({ code: code, info: JSON.stringify(info) }).then(res => {
if (res.statusCode == '200') {
wx.setStorageSync('sessionId', res.data.data.sessionId);
$Message({
content: '登陸成功',
type: 'success'
});
this.checkUserLogin();
}
else {
$Message({
content: '登陸未成功',
type: 'error'
});
}
//請(qǐng)求例子(不同后端header名不一樣,比如php的后端就是 PHPSESSID=你的sessionId)
function userJoinPromise(data,sessionId){
let url = 'travel/api/userJoin';
return getServerDataPromise(url, data, { 'Cookie': 'PHPSESSID=' + sessionId });
}
|
復(fù)制代碼
下班了下班了,先寫(xiě)到這明天繼續(xù)擼