uni-app?微信小程序授權(quán)登錄的實(shí)現(xiàn)步驟

一、appID相關(guān)申請(qǐng)和配置
1. appid獲取方式
登錄微信公眾平臺(tái)
官網(wǎng)鏈接:https://mp.weixin.qq.com/
第一次需要小伙伴們點(diǎn)擊注冊(cè)按鈕,進(jìn)行注冊(cè),如果有賬號(hào),直接掃描登錄即可

官網(wǎng)小程序鏈接:

2. appID配置
在manifest.json中輸入申請(qǐng)的微信小程序id

二、獲取用戶基礎(chǔ)數(shù)據(jù)
這里給小伙伴們演示二種api
2.1. 獲取用戶信息
可以使用uni.getUserProfile請(qǐng)求用戶授權(quán)獲取用戶信息, 也可以使用uni.getUserInfo獲取

授權(quán)成功后獲取到的用戶信息在userInfo中:

頁(yè)面部分:
<button class="login-btn" type="primary" @click="getUserInfo">
微信用戶一鍵登錄
</button>
js部分:
methods: {
getUserInfo() {
uni.getUserInfo({
provider: 'weixin',
success: (res) => {
console.log('getUserInfo', res);
},
});
},
}
獲取的用戶基礎(chǔ)數(shù)據(jù)(無(wú)openid=》微信用戶唯一標(biāo)識(shí))

2.2. 獲取用戶信息2
可以使用uni.getUserInfo請(qǐng)求用戶授權(quán)獲取用戶信息
頁(yè)面一樣,js部分:
getUserInfo() {
uni.getUserProfile({
desc: '登錄后可同步數(shù)據(jù)',
lang: 'zh_CN',
success: (res) => {
console.log('getUserProfile', res);
},
});
},
獲取的用戶基礎(chǔ)數(shù)據(jù)(無(wú)openid=》微信用戶唯一標(biāo)識(shí))

總結(jié):uni.getUserProfile和uni.getUserInfo 二個(gè)api獲取的用戶數(shù)據(jù)基本一樣,都無(wú)openid=》微信用戶唯一標(biāo)識(shí)。
三、調(diào)用登錄api
3.1. 登錄api
使用uni.login方法,provider參數(shù)輸入’weixin’,成功的返回值中如果errMsg=“login:ok” 代表成功,
微信小程序端會(huì)返回一個(gè)code字符串

3.2. 案例代碼
uni.login({
provider: 'weixin',
success: (res) => {
console.log('res-login', res);
this.code = res.code;
console.log('code', res.code);
if (res.errMsg == 'login:ok') {
//TODO 獲取code 攜帶code參數(shù)調(diào)用后端接口}
四、獲取唯一標(biāo)識(shí)信息
4.1. 官網(wǎng)文檔
官網(wǎng)文檔
使用獲取到的code請(qǐng)求微信登錄接口,獲取 openid 和 session_key

4.2. 接口簡(jiǎn)述

請(qǐng)求方式:GET
APPID:小程序唯一標(biāo)識(shí),上面有獲取方式
SECRET:小程序唯一標(biāo)識(shí)的秘鑰,上面參考APPID獲取方式,就在他的下面
JSCODE:這個(gè)前端調(diào)用 uni.login獲取
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

五、綁定用戶 實(shí)現(xiàn)登錄
獲取到微信用戶的唯一id后,就可以綁定至自己系統(tǒng)中的用戶,我的做法是在用戶表中加入weixinId字段,跳轉(zhuǎn)至自己的用戶綁定界面,如果用戶選擇綁定微信,則更新該行用戶數(shù)據(jù)的weixinId。下次用戶使用微信登錄時(shí),如果通過(guò)openId能夠查詢到一條用戶數(shù)據(jù),說(shuō)明已經(jīng)綁定,則登錄該用戶
5.1. 代碼案例(未封裝)
前端部分:
/**
*
* 獲取用戶信息
*/
getUserInfo() {
// 展示加載框
uni.showLoading({
title: '加載中',
});
uni.getUserProfile({
desc: '登錄后可同步數(shù)據(jù)',
success: async (obj) => {
console.log('obj', obj);
// 調(diào)用 action ,請(qǐng)求登錄接口
// await this.login(obj);
uni.login({
provider: 'weixin',
success: (res) => {
console.log('res-login', res);
this.code = res.code;
console.log('code', res.code);
if (res.errMsg == 'login:ok') {
uni
.request({
url:
'http://127.0.0.1:8080/wxh5/wx/user/' +
'wx55822xxxx75e422' +
'/login/',
data: {
code: this.code,
},
})
.then((res) => {
//獲取到 openid 和 session_k后,自己的邏輯
console.log('授權(quán)登錄', res[1].data);
console.log(res[1].data.openid);
console.log(res[1].data.session_key);
// DoSomeThing.................
});
console.log('res', res);
}
},
});
},
fail: () => {
uni.showToast({
title: '授權(quán)已取消',
icon: 'error',
mask: true,
});
},
complete: () => {
// 隱藏loading
uni.hideLoading();
},
});
},
后端部分
@GetMapping("/login")
public String login(@PathVariable String appid, String code) {
if (StringUtils.isBlank(code)) {
return "empty jscode";
}
final WxMaService wxService = WxMaConfiguration.getMaService(appid);
try {
WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
this.logger.info(session.getSessionKey());
this.logger.info(session.getOpenid());
//TODO 可以增加自己的邏輯,關(guān)聯(lián)業(yè)務(wù)相關(guān)數(shù)據(jù)
return JsonUtils.toJson(session);
} catch (WxErrorException e) {
this.logger.error(e.getMessage(), e);
return e.toString();
}
}
5.2. 代碼案例(封裝)
/**
*
* 獲取用戶信息
*/
getUserInfo() {
// 展示加載框
uni.showLoading({
title: '加載中',
});
uni.getUserProfile({
desc: '登錄后可同步數(shù)據(jù)',
success: async (obj) => {
// this.userInfo = obj.userInfo;
// 調(diào)用 action ,請(qǐng)求登錄接口
uni.login({
provider: 'weixin',
success: async (res) => {
this.code = res.code;
// console.log('登錄獲取code', res.code);
if (res.errMsg == 'login:ok') {
await this.loginAuth({
userProfile: obj,
appid: 'wx558xxxxxxxxxxxxxxx2',
code: this.code,
});
}
},
});
},
fail: () => {
uni.showToast({
title: '授權(quán)已取消',
icon: 'error',
mask: true,
});
},
complete: () => {
// 隱藏loading
uni.hideLoading();
},
});
},
},
user.js
/**
* 微信用戶授權(quán)登錄,攜帶appid和code參數(shù),調(diào)用后端接口獲取Openid
*/
export function loginAuth(data) {
return request({
url: '/wx/user/' + data.appid + '/login/',
data: {
code: data.code,
},
});
}
vuex user模塊(user.js)
// 微信用戶授權(quán)登錄,攜帶appid和code參數(shù),調(diào)用后端接口獲取Openid
async loginAuth(context, data) {
console.log('data', data);
const userInfo = data.userProfile;
const { content: res } = await loginAuth({
appid: data.appid,
code: data.code,
});
// 解析后端傳送過(guò)來(lái)的json對(duì)象
const userAuthInfo = JSON.parse(res);
const openid = userAuthInfo.openid;
// console.log('sessionKey', userAuthInfo.sessionKey);
console.log('openid', openid);
// 保存到vuex中,通過(guò)commit
this.commit('user/setOpenid', userAuthInfo.openid);
this.commit('user/setUserInfo', JSON.parse(userInfo.rawData));
},


六、項(xiàng)目開源地址
6.1. 前端
6.2. 后端
到此這篇關(guān)于uni-app 微信小程序授權(quán)登錄的文章就介紹到這了,更多相關(guān)uni-app 微信小程序授權(quán)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- uni-app小程序?qū)崿F(xiàn)微信在線聊天功能(私聊/群聊)
- 微信小程序使用uni-app一鍵獲取用戶信息
- 微信小程序使用uni-app實(shí)現(xiàn)首頁(yè)搜索框?qū)Ш綑诠δ茉斀?/a>
- uni-app微信小程序使用echarts的詳細(xì)圖文教程
- 如何基于uni-app實(shí)現(xiàn)微信小程序一鍵登錄與退出登錄功能
- 解決uni-app微信小程序input輸入框在底部時(shí),鍵盤彈起頁(yè)面整體上移問(wèn)題
- 微信小程序使用uni-app開發(fā)小程序及部分功能實(shí)現(xiàn)詳解
- uniapp微信小程序多環(huán)境配置以及使用教程
- Vue微信小程序和uniapp配置環(huán)境地址
相關(guān)文章
JavaScript遍歷數(shù)組和對(duì)象的元素簡(jiǎn)單操作示例
這篇文章主要介紹了JavaScript遍歷數(shù)組和對(duì)象的元素簡(jiǎn)單操作,結(jié)合實(shí)例形式分析了javascript數(shù)組與對(duì)象元素遍歷相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-07-07
JavaScript實(shí)現(xiàn)的DOM樹遍歷方法詳解【二叉DOM樹、多叉DOM樹】
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的DOM樹遍歷方法,結(jié)合實(shí)例形式詳細(xì)分析了二叉DOM樹、多叉DOM樹的前序、中序與后序遍歷,以及多叉樹深度優(yōu)先、廣度優(yōu)先等相關(guān)遍歷操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05
基于JavaScript實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
JS使用cookie實(shí)現(xiàn)只出現(xiàn)一次的廣告代碼效果
我們上網(wǎng)經(jīng)常會(huì)遇到第一次需要登錄而之后不用再登錄的網(wǎng)站的情況,其實(shí)是運(yùn)用了Cookie 存儲(chǔ) web 頁(yè)面的用戶信息,Cookie 以名/值對(duì)形式存儲(chǔ),當(dāng)瀏覽器從服務(wù)器上請(qǐng)求 web 頁(yè)面時(shí), 屬于該頁(yè)面的 cookie 會(huì)被添加到該請(qǐng)求中2017-04-04
js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法
這篇文章主要介紹了js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法,涉及javascript操作圖片實(shí)現(xiàn)輪播效果的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
Javascript的表單驗(yàn)證-初識(shí)正則表達(dá)式
JavaScript 可用來(lái)在數(shù)據(jù)被送往服務(wù)器前對(duì) HTML 表單中的這些輸入數(shù)據(jù)進(jìn)行驗(yàn)證。接下來(lái)通過(guò)本文給大家介紹Javascript的表單驗(yàn)證-初識(shí)正則表達(dá)式,對(duì)js表單驗(yàn)證正則表達(dá)式相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03
jscript之List Excel Color Values
jscript之List Excel Color Values...2007-06-06

