知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
小程序(五)小程序登錄、注冊
發(fā)表時間:2020-9-28
發(fā)布人:葵宇科技
瀏覽次數(shù):50
小程序理論上和VUE是差不多的,我在做VUE的登錄注冊的時候,用戶信息使用服務(wù)器端的session存了一份,還使用前端的緩存存了一份。小程序這邊我可能不需要這么麻煩,只用小程序的緩存將用戶信息存一份大概就可以了。
我這里大概是這樣實現(xiàn)。
首先,在你創(chuàng)建小程序的時候,示例就會告訴你小程序的登錄是在app.js的onlaunch中實現(xiàn)的,在小程序的生命周期中,我們了解onlaunch全局只調(diào)用一次。
因此,小程序的登錄也是在小程序生成結(jié)束之后,只調(diào)用一次,而且這個玩意,他是在后臺進行的,不會彈窗。這就很完美了。
我這里大概是這么實現(xiàn)的
首先放一張官方的圖:
其實大概流程就是:
1:小程序前端通過調(diào)用wx.login方法獲取code
2:將code傳回服務(wù)器
3:服務(wù)器端通過小程序appid,appsecert,以及剛剛獲取的code,請求微信服務(wù)接口,獲取當前用戶唯一信息(openid,sessionkey):
4:如果數(shù)據(jù)庫中有匹配當前openid的信息,執(zhí)行登錄操作(將數(shù)據(jù)庫中的信息返回小程序前端)如果數(shù)據(jù)庫中沒有匹配當前openid的信息,執(zhí)行注冊操作(將剛才返回的信息寫入數(shù)據(jù)庫)
5:將后端返回的信息存儲至小程序緩存storage中。
登錄的基本流程應(yīng)該就是這樣。當然,這其中可能還有你自己特定的業(yè)務(wù)流程。這里不做體現(xiàn)。
下邊我這里大概放一下我的代碼:
App.js中的代碼:
/**
* @name 小程序初始化時觸發(fā),全局只觸發(fā)一次
*/
>: function () {
// 登錄
wx.login({
success (res) {
if (res.code) {
//發(fā)起網(wǎng)絡(luò)請求
wx.request({
// 請求連接
url: 'https://guanchao.site/ ',
// 請求所需要的的參數(shù)
data: {
code: res.code
},
// 請求成功之后,將信息存儲至storage 中
success(data){
// 將返回信息存儲至storage中
wx.setStorage({
key:"userinfo",
data:data
});
// 從storage中獲取用戶信息
/*wx.getStorage({
key: 'userinfo',
success (res) {
console.log(res.data)
}
})//*/
}
});
} else {
console.log('登錄失敗!' + res.errMsg)
}//*/
}
});
},
服務(wù)器端PHP代碼:
/**
* @name 獲取微信用戶信息并執(zhí)行登錄/注冊
* @date 20200628
* @author camellia
*/
public function getWeiXinUserInfo()
{
// 獲取臨時登錄code
$code = input('code');
// 請求微信接口,獲取openid等其他信息
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$this->appid."&secret=". $this->appSecret."&js_code=".$code."&grant_type=authorization_code";
// 使用file_get_content函數(shù)獲取接口返回信息
$info = file_get_contents($url);
// curl 獲取微信用戶信息。
/*$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);//*/
// 這里是獲取到的信息,解析json
$userinfo = json_decode($info);
// 獲取openid
$open_id = $userinfo->openid;
// 獲取session_key
$session_key = $userinfo->session_key;
$time = date('Y-m-d H:i:s',time());
// 查詢用戶信息,根據(jù)openid
$user = db('user');
$userinfo = $user->where("mini_openid = '{$open_id}'")->find();
// 如果用戶信息有值,說明該用戶注冊過了
if(!isset($userinfo['id']))
{
// 將用戶信息寫入數(shù)據(jù)庫
$res = Db::execute("INSERT INTO user (mini_openid,regtime,session_key)
VALUES ('{$open_id}','{$time}','{$session_key}')");
}
else
{
// 將用戶信息更新數(shù)據(jù)庫
$res = Db::execute("UPDATE user SET session_key = '{$session_key}' WHERE id = '{$userinfo['id']}'");
}
if($res <= 0)
{
$userinfo['code'] = -1;
}
else
{
$userinfo['code'] = 1;
}
$userinfo['mini_openid'] = $open_id;
$userinfo['session_key'] = $session_key;
$result = json_encode($userinfo);
return $result;
}
注意,以上的代碼只是完成了登錄,而并沒有獲取用戶信息(我這里的用戶信息包括頭像,昵稱等)也沒有獲取當前用戶注冊微信所用的電話號。這個以后會有說明
我這里的登錄和注冊只是將獲取到的用戶的唯一標識openid以及session_key寫入到了數(shù)據(jù)庫中。
大概就是這樣
有好的建議,請在下方輸入你的評論。
歡迎訪問我的小程序:
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)報價
- 文山小程序開發(fā)
- 云南網(wǎng)站建設(shè)方法
- 昆明網(wǎng)站設(shè)計
- 退款
- 云南省建設(shè)廳官方網(wǎng)站
- 政府網(wǎng)站建設(shè)服務(wù)
- 百度自然排名
- 云南網(wǎng)站建設(shè)公司哪家好
- 網(wǎng)站建設(shè)快速優(yōu)化
- 云南軟件定制
- web服務(wù)
- 云南網(wǎng)站建設(shè)外包
- 網(wǎng)頁制作
- 網(wǎng)站開發(fā)公司哪家好
- 報廢車回收管理系統(tǒng)
- 大理小程序開發(fā)
- 云南花農(nóng)小程序
- 報廢車拆解管理系統(tǒng)
- 開發(fā)制作小程序
- 云南網(wǎng)站建設(shè)哪家好
- 汽車回收系統(tǒng)
- 排名
- 網(wǎng)絡(luò)公司
- 云南小程序代建
- 云南網(wǎng)站建設(shè)首選公司
- 云南小程序開發(fā)公司
- 云南網(wǎng)站建設(shè)專業(yè)品牌
- web開發(fā)技術(shù)
- 云南小程序開發(fā)公司推薦