基于(yú)bmob快速搭建小程序用戶模塊(包括登錄、當前用戶、用戶安全) ...
發表時(shí)間:2021-3-31
發布人(rén):融晨科技
浏覽次數:90
一鍵登錄
開發小程序登錄後端工作:
- 客戶端調用wx.login()後獲取的(de)code,後端人(rén)員拿到(dào)code和(hé / huò)微信換取openid和(hé / huò)session_key;
- 除此之(zhī)外後端人(rén)員還需要(yào / yāo)根據openid生成sessiontoken作爲(wéi / wèi)服務器和(hé / huò)小程序之(zhī)間做登錄态校驗保證安全性,客戶端每次請求需要(yào / yāo)帶上(shàng)sessiontoken,後端需要(yào / yāo)作校驗;
- 還需要(yào / yāo)提供接口給客戶端保存用戶信息(頭像、名稱等),或者根據openid去和(hé / huò)微信換取用戶信息;
- 中間的(de)過程的(de)調試還需要(yào / yāo)花費大(dà)量的(de)時(shí)間
利用bmob的(de)小程序sdk的(de)實現一鍵登錄:
以(yǐ)上(shàng)後端開發工作全省了(le/liǎo)!!
wx.login({
success: function (res) {
var user = new Bmob.User();//實例化
user.loginWithWeapp(res.code).then(function (user) {
if (user.get("nickName")) {
//更新緩存中的(de)openid
wx.setStorageSync('openid', user.get("openid"))
} else {
//*************保存用戶其他(tā)信息,比如昵稱頭像之(zhī)類的(de)*****************
wx.getUserInfo({
success: function (result) {
var nickName = result.userInfo.nickName;
var avatarUrl = result.userInfo.avatarUrl;
var u = Bmob.Object.extend("_User");
var query = new Bmob.Query(u);
// 這(zhè)個(gè) id 是(shì)要(yào / yāo)修改條目的(de) id,你在(zài)生成這(zhè)個(gè)存儲并成功時(shí)可以(yǐ)獲取到(dào),請看前面的(de)文檔
query.get(user.id, {
success: function (result) {
// 自動綁定之(zhī)前的(de)賬号
result.set('nickName', nickName);
result.set("userPic", avatarUrl);
result.set("openid", openid);
result.save();
}
});
}
});
//*************保存用戶其他(tā)信息,比如昵稱頭像之(zhī)類的(de)end*****************
}
}, function (err) {
console.log(err, 'errr');
});
}
});
}
user用戶對象中的(de)loginWithWeapp方法使用當前使用小程序的(de)微信用戶身份注冊或登錄,成功後用戶的(de) session 會在(zài)設備上(shàng)持久化保存,之(zhī)後可以(yǐ)使用 Bmob.User.current() 獲取當前登錄用戶
如果該用戶是(shì)第一次使用此應用,調用登錄 API 會創建一個(gè)新的(de)用戶,你可以(yǐ)在(zài) 控制台 >應用> 數據 中的(de) _User表中看到(dào)該用戶的(de)信息,如果該用戶曾經使用該方式登錄過此應用,再次調用登錄 API 會返回同一個(gè)用戶。
登錄後獲取到(dào)一個(gè)用戶數據對象,包括用戶唯一标識objectId、openid、nickName、avatarUrl、authData,authData包括sessiontoken登錄校驗,小程序sdk封裝了(le/liǎo)請求帶上(shàng)了(le/liǎo)緩存authData的(de)sessiontoken,所以(yǐ)session_token這(zhè)部分 不(bù)需要(yào / yāo)bmob的(de)開發者考慮;
當前用戶
如果用戶每次打開App的(de)時(shí)候都要(yào / yāo)求登錄無疑是(shì)令人(rén)感到(dào)厭煩的(de),你可以(yǐ)通過緩存當前的(de)Bmob.User對象來(lái)避免這(zhè)個(gè)問題。
無論你使用任何注冊或者登錄方法,用戶都會在(zài)localStorage中儲存,你可以(yǐ)把緩存作爲(wéi / wèi)一個(gè)session對待,并且自動假設用戶已經登錄了(le/liǎo)。
你可以(yǐ)操作Bmob.User.current()來(lái)獲取當前用戶的(de)信息
var currentUser = Bmob.User.current();
用戶安全
Bmob.User類默認就(jiù)是(shì)受保護的(de),在(zài)Bmob.User中保存的(de)數據隻能被那個(gè)用戶所修改。默認地(dì / de),數據仍然可以(yǐ)被任意客戶端所讀取。這(zhè)樣就(jiù)是(shì)說(shuō),有些Bmob.User對象被認證後是(shì)可以(yǐ)修改的(de),其他(tā)的(de)仍然是(shì)隻讀的(de)。
特别的(de),你不(bù)能調用save或者delete方法除非Bmob.User經過了(le/liǎo)認證,就(jiù)比如調用過了(le/liǎo)logIn或者signUp方法,這(zhè)樣保證隻有用戶能改動他(tā)們自身的(de)數據。