uni-app 第三方授权登录
<p>注意:在使用uni-app第三方登录时采用的是手机真机调试</p><p>授权登录html</p>
<div class="cnblogs_code">
<pre><view type="primary" <span style="color: rgba(0, 0, 255, 1)">class</span>="login_type" v-<span style="color: rgba(0, 0, 255, 1)">for</span>="(value,key) in providerList" @click="tologin(value)"
:<span style="color: rgba(0, 128, 128, 1)">key</span>="key">
<view <span style="color: rgba(0, 0, 255, 1)">class</span>="login_type_name">{{value.name}}</view>
</view></pre>
</div>
<div class="cnblogs_code">
<pre><script><span style="color: rgba(0, 0, 0, 1)">
import {
mapState</span>,<span style="color: rgba(0, 0, 0, 1)">
mapMutations
} from </span>'vuex'<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
data() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title</span>: 'login',<span style="color: rgba(0, 0, 0, 1)">
providerList</span>: [],<span style="color: rgba(0, 0, 0, 1)">
openid</span>:''<span style="color: rgba(0, 0, 0, 1)">
}
}</span>,<span style="color: rgba(0, 0, 0, 1)">
computed</span>:<span style="color: rgba(0, 0, 0, 1)"> {
</span>...mapState(['hasLogin'<span style="color: rgba(0, 0, 0, 1)">])
}</span>,<span style="color: rgba(0, 0, 0, 1)">
onLoad() {
uni</span>.<span style="color: rgba(0, 0, 0, 1)">getProvider({
service</span>: 'oauth',<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">服务类型</span>
success: (result) =><span style="color: rgba(0, 0, 0, 1)"> {
this</span>.providerList = result.provider.map((value) =><span style="color: rgba(0, 0, 0, 1)"> {
let providerName </span>= ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (value) {
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'weixin':<span style="color: rgba(0, 0, 0, 1)">
providerName </span>= '微信'
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'qq':<span style="color: rgba(0, 0, 0, 1)">
providerName </span>= 'QQ'
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'sinaweibo':<span style="color: rgba(0, 0, 0, 1)">
providerName </span>= '微博'
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
name</span>: providerName,<span style="color: rgba(0, 0, 0, 1)">
id</span>:<span style="color: rgba(0, 0, 0, 1)"> value
}
});
}</span>,<span style="color: rgba(0, 0, 0, 1)">
fail</span>: (error) =><span style="color: rgba(0, 0, 0, 1)"> {
console</span>.<span style="color: rgba(0, 128, 128, 1)">log</span>('获取登录通道失败',<span style="color: rgba(0, 0, 0, 1)"> error);
}
});
}</span>,<span style="color: rgba(0, 0, 0, 1)">
methods</span>:<span style="color: rgba(0, 0, 0, 1)"> {
</span>...mapMutations(['login']),<span style="color: rgba(0, 0, 0, 1)">
tologin(provider) {
uni</span>.<span style="color: rgba(0, 0, 0, 1)">login({
provider</span>: provider.id,
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #ifdef MP-ALIPAY</span>
scopes: 'auth_user', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支付宝小程序需设置授权类型
// #endif</span>
success: (res) =><span style="color: rgba(0, 0, 0, 1)"> {
console</span>.<span style="color: rgba(0, 128, 128, 1)">log</span>('login success:',<span style="color: rgba(0, 0, 0, 1)"> res);
this</span>.openid=res.authResult.<span style="color: rgba(0, 0, 0, 1)">openid;
uni</span>.setStorageSync('openid', res.authResult.<span style="color: rgba(0, 0, 0, 1)">openid);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 更新保存在 store 中的登录状态</span>
this.login(provider.<span style="color: rgba(0, 0, 0, 1)">id);<br> //根据openid获取当前授权的信息
uni</span>.<span style="color: rgba(0, 0, 0, 1)">getUserInfo({
provider</span>: this.loginProvider,<span style="color: rgba(0, 0, 0, 1)">
success</span>: (result) =><span style="color: rgba(0, 0, 0, 1)"> {
console</span>.<span style="color: rgba(0, 128, 128, 1)">log</span><span style="color: rgba(0, 0, 0, 1)">(result);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> _this=<span style="color: rgba(0, 0, 0, 1)">this;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> // 将第三方信息添加入库</span>
this.<span style="color: rgba(128, 0, 128, 1)">$api</span>.baseRequest("partyRegister", "POST",<span style="color: rgba(0, 0, 0, 1)"> {
patient_name</span>: result.userInfo.nickName,<span style="color: rgba(0, 0, 0, 1)">
openid</span>: _this.openid,<span style="color: rgba(0, 0, 0, 1)">
figure_url</span>: result.userInfo.<span style="color: rgba(0, 0, 0, 1)">avatarUrl
})</span>.then(res =><span style="color: rgba(0, 0, 0, 1)"> {
返回值</span><span style="color: rgba(0, 0, 0, 1)">
});
}</span>,<span style="color: rgba(0, 0, 0, 1)">
fail</span>: (error) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log('getUserInfo fail', error);</span>
uni.<span style="color: rgba(0, 0, 0, 1)">navigateTo({
url</span>: "../login/login"<span style="color: rgba(0, 0, 0, 1)">
})
}
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> // #ifdef MP-WEIXIN
// console.warn('如需获取openid请参考uni-id: https://uniapp.dcloud.net.cn/uniCloud/uni-id');
// #endif</span>
},<span style="color: rgba(0, 0, 0, 1)">
fail</span>: (err) =><span style="color: rgba(0, 0, 0, 1)"> {
console</span>.<span style="color: rgba(0, 128, 128, 1)">log</span>('login fail:',<span style="color: rgba(0, 0, 0, 1)"> err);
}
});
}</span>,<span style="color: rgba(0, 0, 0, 1)">
formSubmit</span>: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> phone_number = e.detail.value.<span style="color: rgba(0, 0, 0, 1)">phone_number;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> password = e.detail.value.<span style="color: rgba(0, 0, 0, 1)">password;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (phone_number.length == ''<span style="color: rgba(0, 0, 0, 1)">) {
uni</span>.<span style="color: rgba(0, 0, 0, 1)">showToast({
title</span>: '手机号必填',<span style="color: rgba(0, 0, 0, 1)">
icon</span>: 'none'<span style="color: rgba(0, 0, 0, 1)">
})
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 验证手机格式未完成</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (phone_number.length != 11<span style="color: rgba(0, 0, 0, 1)">) {
uni</span>.<span style="color: rgba(0, 0, 0, 1)">showToast({
title</span>: '手机号格式有误',<span style="color: rgba(0, 0, 0, 1)">
icon</span>: 'none'<span style="color: rgba(0, 0, 0, 1)">
})
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (password.length == ''<span style="color: rgba(0, 0, 0, 1)">) {
uni</span>.<span style="color: rgba(0, 0, 0, 1)">showToast({
title</span>: '密码必填',<span style="color: rgba(0, 0, 0, 1)">
icon</span>: 'none'<span style="color: rgba(0, 0, 0, 1)">
})
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 0, 1)">
}</span>,<span style="color: rgba(0, 0, 0, 1)">
}
}
</span></script>
<style><span style="color: rgba(0, 0, 0, 1)">
@import </span>"./login.css"<span style="color: rgba(0, 0, 0, 1)">;
</span></style></pre>
<img src="https://img2020.cnblogs.com/blog/2330586/202105/2330586-20210516205844835-52265715.png">
<p> </p>
<p> </p>
</div>
<p> </p>
<p>获取授权信息</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> uni.getUserInfo({
// provider: this.loginProvider,
// success: (result) => {
// console.log(result)
// // 用户名称
// this.patient=result.userInfo.nickName;
// this.openid=result.userInfo.openId;
// // 用户头像
// this.info.image=result.userInfo.avatarUrl;
// this.hasUserInfo = true;
// this.userInfo = result.userInfo;
// }
// });</span></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/jerry-min/p/14774832.html
頁:
[1]