如何基于uni-app實(shí)現(xiàn)微信小程序一鍵登錄與退出登錄功能
起因
目前正在使用uni-app開發(fā)一個(gè)微信小程序,開發(fā)到登錄模塊時(shí)通過查閱uni-app官方教程、微信小程序官方文檔、網(wǎng)上的教程終于是實(shí)現(xiàn)了微信小程序的登錄模塊,現(xiàn)總結(jié)分享給大家,共同學(xué)習(xí)。
總體思路
- 創(chuàng)建Vuex進(jìn)行狀態(tài)管理(可根據(jù)實(shí)際需求自行選擇是否使用)
- 創(chuàng)建一個(gè)登錄按鈕并添加觸發(fā)事件
- 調(diào)用官方uni.getUserProfile() 接口獲取用戶信息
- 調(diào)用官方uni.login() 接口獲取臨時(shí)登錄憑證code
- 調(diào)用后端的登錄接口將code 傳過去獲取token 值
- 登錄成功!渲染用戶信息到頁面中
- 創(chuàng)建一個(gè)退出登錄按鈕并添加觸發(fā)事件
- 清空 vuex 中的 userinfo和token
- 退出成功!跳轉(zhuǎn)到其他頁面
詳細(xì)流程
創(chuàng)建Vuex進(jìn)行狀態(tài)管理,用于全局存放token和用戶信息方便使用。(可根據(jù)實(shí)際需求自行選擇是否使用)
token 可用于判斷用戶是否已登錄,以及作為后續(xù)的訪問憑證
const store = createStore({
state: {
"token": uni.getStorageSync('token') || '',
"userinfo": JSON.parse(uni.getStorageSync('userinfo') || '{}')
},
mutations: {
// 更新用戶信息
updateUserInfo(state, userinfo) {
state.userinfo = userinfo
this.commit('saveUserInfoToStorge')
},
// 將用戶信息持久化存儲(chǔ)到本地
saveUserInfoToStorge(state) {
uni.setStorageSync('userinfo', JSON.stringify(state.userinfo))
},
// 更新 token 字符串
updateToken(state, token) {
state.token = token
// 調(diào)用saveTokenToStorage方法
this.commit('saveTokenToStorage')
},
// 將 token 字符串持久化存儲(chǔ)到本地
saveTokenToStorage(state) {
uni.setStorageSync('token', state.token)
}
}
})
創(chuàng)建一個(gè)按鈕并添加觸發(fā)事件
<button type="primary" @click="getUserInfo">一鍵登錄</button>
調(diào)用官方uni.getUserProfile() 接口獲取用戶信息,并儲(chǔ)存到Vuex中
getUserInfo() {
uni.getUserProfile({
//聲明獲取用戶個(gè)人信息后的用途(必填)
desc: "僅用作登錄功能",
success: (res) => {
//調(diào)用Vuex中的updateUserInfo()方法,將用戶信息存儲(chǔ)到Vuex中
this.updateUserInfo(res.userInfo)
},
fail: () => {
uni.$showMsg('您取消了登錄授權(quán)!')
}
})
},
調(diào)用官方uni.login() 接口獲取臨時(shí)登錄憑證code
const res = await uni.login().catch(err => err)
//判斷是否獲取成功
if (res.errMsg !== 'login:ok') return uni.$showMsg('登錄失?。?)
調(diào)用后端的登錄接口將code 傳過去,后端會(huì)返回一個(gè)token值,將token值儲(chǔ)存到Vuex中并持久化保存到本地中
//換取token
const { data: loginResult } = await uni.$http.post(`/wx/login?code=${res.code}`)
//將token值存儲(chǔ)到Vuex中
this.updateToken(loginResult.data.ticket)
登錄成功!渲染用戶信息到頁面中
創(chuàng)建一個(gè)退出登錄按鈕并添加觸發(fā)事件
<button @click="logout">退出登錄</button>
定義 logout 事件處理函數(shù)
// 退出登錄
async logout() {
// 詢問用戶是否退出登錄
const [err, succ] = await uni.showModal({
title: '提示',
content: '確認(rèn)退出登錄嗎?'
}).catch(err => err)
if (succ && succ.confirm) {
// 用戶確認(rèn)了退出登錄的操作
// 清空 vuex 中的 userinfo、token
this.updateUserInfo({})
this.updateToken('')
}
}
退出成功!并跳轉(zhuǎn)到其他頁面
uni.switchTab({
//跳轉(zhuǎn)到主頁
url: '../../pages/home/home',
success: () => {
//跳轉(zhuǎn)成功后提示退出成功
uni.$showMsg('退出成功')
},
})
總結(jié)
總體流程并不復(fù)雜,登錄就是調(diào)用兩個(gè)官方接口和一個(gè)后臺(tái)接口獲取用戶信息和token值,退出登錄就是清除儲(chǔ)存的用戶信息和token值。
到此這篇關(guān)于如何基于uni-app實(shí)現(xiàn)微信小程序一鍵登錄與退出登錄功能的文章就介紹到這了,更多相關(guān)uni-app微信小程序一鍵登錄與退出登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript的onchange事件與jQuery的change()方法比較
本來是想添加文本框文本內(nèi)容改變事件動(dòng)作的,結(jié)果找了許多這方面的javascript代碼都不如意。2009-09-09
通過sails和阿里大于實(shí)現(xiàn)短信驗(yàn)證
本篇文章主要介紹了通過sails和阿里大于實(shí)現(xiàn)短信驗(yàn)證的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
JS實(shí)現(xiàn)兼容性較好的隨屏滾動(dòng)效果
這篇文章主要介紹了JS實(shí)現(xiàn)兼容性較好的隨屏滾動(dòng)效果,演示了固定位置顯示和隨屏滾動(dòng)兩種效果的實(shí)現(xiàn)方法,涉及css樣式的設(shè)置與結(jié)合時(shí)間函數(shù)遞歸調(diào)用實(shí)現(xiàn)滾屏的技巧,需要的朋友可以參考下2015-11-11
js判斷兩個(gè)數(shù)組相等的5種方法實(shí)例
再最近的一次實(shí)際項(xiàng)目開發(fā)中,又遇到了需要對(duì)兩個(gè)數(shù)組內(nèi)容進(jìn)行比較的需求,索性整理下,這篇文章主要給大家介紹了關(guān)于js判斷兩個(gè)數(shù)組相等的5種方法,需要的朋友可以參考下2022-05-05
JavaScript模擬實(shí)現(xiàn)新浪下拉菜單效果
這篇文章主要為大家介紹了如何通過JavaScript模擬實(shí)現(xiàn)新浪的下拉菜單效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手試一試2022-03-03
小程序開發(fā)實(shí)戰(zhàn)指南之封裝自定義彈窗組件
最近在做公司的小程序項(xiàng)目,發(fā)現(xiàn)設(shè)計(jì)上有很多不統(tǒng)一,代碼上有很多冗余,下面這篇文章主要給大家介紹了關(guān)于小程序開發(fā)實(shí)戰(zhàn)指南之封裝自定義彈窗組件的相關(guān)資料,需要的朋友可以參考下2022-11-11

