因此,微信小程序退出賬號的具體流程包括以下幾點:
1.用戶登錄操作:
(1)微信小程序調用wx.login獲取登錄證書(代碼)。
(2)將代碼傳遞給後端服務,然後交換用戶的登錄狀態信息,包括用戶的唯壹標識(openid),並生成與用戶壹壹對應的token值,保存並返回給微信小程序客戶端。
(3)微信小程序獲取令牌並保存在本地,可作為登錄狀態的憑證。
前端代碼是:
const login =?函數(){
wx . show loading({ title:‘landing‘})
wx.login()。然後(res = & gt{
if(RES . errmsg = = =‘log in:ok‘){
API . log in(RES . code)。然後(data = & gt{
wx.hideLoading()
wx . setstoragesync(‘token‘,data)})
}})}
後端服務代碼是:
異步登錄(jsCode ){
const { ctx,app } = this
const APPID = app . config . mini program . APPID;
const SECRET = app . config . mini program . app SECRET;
const url = `/sns/jscode2session?appid = $ { APPID } & ampsecret = $ { SECRET } & ampjs _ code = $ { jsCode } & ampgrant _ type = authorization _ code `;
const RES = await CTX . curl(URL,{ method:‘GET‘,dataType:‘JSON‘});
const OpenID = RES . data . OpenID;
const session _ key = RES . data . session _ key;
const str = await app . redis . get(OpenID);
if(str & amp;& ampJSON . parse(str)。access token){//已登錄。
const oldAccessToken = JSON . parse(str)。accessToken
await app . redis . del(oldAccessToken);//刪除令牌實現單點登錄。
await app . redis . del(OpenID);}
const access token = await CTX . helper . createwxtoken(OpenID,session _ key);//生成新令牌
返回accessToken}
2.退出登錄操作:
(1)單擊“退出帳戶”按鈕調用ajax請求後端退出登錄界面並傳遞用戶令牌。如果退出成功,當前用戶的登錄狀態和令牌信息將被清除。
(2)刷新當前頁面數據並清除頁面上的用戶信息。
(3)後端API在收到客戶端傳遞的用戶令牌後,查詢數據庫以確定用戶是否已登錄,如果是,則刪除該令牌或將其設置為無效。
前端代碼是:
const logout =?函數(){
wx . show loading({ title:‘退出登錄‘})
const token = wx . getstoragesync(‘token‘)
API . logout({ token:token })。然後(data = & gt{
wx.hideLoading()
wx . removestoragesync(‘token‘)
refreshPageData()
})}
後端代碼是:
異步註銷(access token ){
const { ctx,app } = this
const userId = await app . redis . get(access token);
如果(!UserId)CTX . throw(400,“登錄狀態已過期”);
await app . redis . del(userId);//刪除用戶標識
await app . redis . del(access token);//刪除令牌
}
擴展數據:
1.微信小程序的密碼登錄和授權登錄後,令牌將保存在loacalStore中。每次加載接口時,都會攜帶令牌向服務器傳達登錄狀態。
2.微信小程序註銷時需要清除登錄狀態。在微信小程序API中調用wx.login()進行登錄操作時,需要通過登錄接口獲取代碼後調用後端接口生成token。由於安全問題,不要在前端使用密鑰生成。註銷時,需要清除localStorage中的緩存令牌和用戶信息,並刷新當前頁面數據。