> 開發跨平臺app, 難免會涉及第三方賬號授權登錄
> 以下代碼中,微信、qq、微博三大平臺返回的字段不同, 需要自行處理
> 該代碼會用到provider,參考《獲取服務提供商》篇
```
<template>
<view class="auth">
<!-- #ifdef APP-PLUS -->
// 條件編譯, 代碼只有在app內才生效
<image src="../../static/weixin.jpeg" data-loginType="weixin" @click="login"></image>
<image src="../../static/qq.jpeg" data-loginType="qq" @click="login"></image>
<image src="../../static/weibo.jpeg" data-loginType="sinaweibo" @click="login"></image>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
// 條件編譯, 代碼只有在微信小程序內才生效
<button type="default" open-type="getUserInfo" @getuserinfo="xcxLogin" withCredentials="true">小程序登錄</button>
<!-- #endif -->
</view>
</template>
<script>
export default {
data(){
return {};
},
onLoad() {
},
methods: {
login(e){
let loginType = e.currentTarget.dataset.logintype;
uni.login({
provider: loginType,
success: function (loginRes) {
//console.log(loginRes.authResult);
// 獲取用戶信息
uni.getUserInfo({
provider: loginType,
success: function (infoRes) {
//console.log(JSON.stringify(infoRes))
var openId = ''; //如果開放平臺申請了應用互通,可獲取unionId
var nickName = '';
if (loginType == 'weixin') {
openId = infoRes.userInfo.openId;
nickName = infoRes.userInfo.nickName;
} else if (loginType == 'qq') {
openId = infoRes.userInfo.openId;
nickName = infoRes.userInfo.nickname;
} else if (loginType == 'sinaweibo') {
openId = infoRes.userInfo.id;
nickName = infoRes.userInfo.nickname;
}
console.log('昵稱:' + nickName + ',openId:' + openId);
},
});
}
});
},
xcxLogin(res){
uni.login({
provider: 'weixin',
success: function(loginRes) {
//console.log(loginRes);
let code = loginRes.code;
// 獲取用戶信息
uni.getUserInfo({
provider: 'weixin',
success: function(infoRes) {
//console.log(infoRes)
console.log('昵稱:' + infoRes.userInfo.nickName + ', 頭像:' + infoRes.userInfo.avatarUrl);
}
});
// 將用戶登錄code傳遞到后臺置換用戶SessionKey、OpenId等信息
// 服務端可讓客戶端把code、昵稱、頭像等信息一并傳入,服務端將code換取為openId后保存,并返回access_token
uni.request({
url: '服務器地址',
data: {
code: code,
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: (res) => {
//openId、或SessionKdy存儲//隱藏loading
uni.hideLoading();
}
});
}
});
}
}
}
</script>
```
> 參考文檔:https://uniapp.dcloud.io/api/plugins/login
> 小程序參考:https://www.cnblogs.com/wfaceboss/p/10472413.html
- 基礎知識
- UNI核心介紹
- flex布局
- 生命周期
- 全局方法
- 組件定義
- 自定義組件
- 全局組件
- 組件之間的數據傳輸
- 條件編譯
- 自定義頭部
- 節點信息 (SelectorQuery)
- vuejs基礎語法
- 頁面跳轉以及參數傳遞
- 事件的監聽注冊以及觸發
- css3動畫
- block的妙用
- mixin (混入)
- uniapp快捷鍵
- vuex狀態管理
- 實用功能
- 獲取服務提供商
- 啟動頁 / 啟動界面
- 引導頁
- tabbar配置
- 頭部導航欄基礎設置
- 上拉下拉(刷新/加載)
- 第三方登錄
- 第三方分享
- 推送通知 之 unipush
- scroll-view雙聯動
- 配置iOS通用鏈接(Universal Links)
- 本地緩存操作
- 升級/更新方案
- 熱更新
- 圖片上傳
- 搜索頁實現
- canvas繪圖助手
- 地圖定位
- 第三方支付————todo
- 分類輪播
- 清除應用緩存
- uniapp與webview的實時通訊
- 視頻-----todo
- 聊天----todo
- 長列表swiper左右切換
- 第三方插件
- uview
- mescroll
- uCharts (圖表)
- 無名 (更新插件)
- 第三方模版
- 自定義基座
- 打包發行
- 要封裝的方法
- 緩存 cache.js
- 請求接口 request.js
- 工具類 util.js
- 小程序登錄 xcxLogin.js
- 版本更新 update.js
- 優質插件
- 更新插件----todo
- 語音
- 語音識別 (含上傳)
- 百度語音合成播報接口
- 官方常用組建
- input 輸入框
- image 圖片
- audio 音頻
- picker 選擇器
- video 視頻
- scroll-view 滾動視圖