uni-app对接一键登录
<p>官方文档地址:https://uniapp.dcloud.net.cn/univerify.html</p><p>1.</p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185508255-1666703865.png"></p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185520859-1428025859.png"></p>
<p>2.开通uniCloud服务</p>
<p>一键登录功能需要用到云空服务空间和云函数所以必须开通服务空间,你一键登录创建的原函数上传后也会存在这里面</p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185549152-1091346825.png"></p>
<p> 3.配置manifest.json ,需要在App模块配置勾选上OAuth(登录鉴权)和一键登录(univerify)</p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185605350-95571240.png"></p>
<p> </p>
<p>4.</p>
<p>创建云uniCloud云开发环境<br>上面的步骤都配置好了,接下来就可以回到编辑器创建云开发环境了, 右击你的项目文件夹 -> 选择创建uniCloud云开发环境 -> 选择你的云服务空间类型(阿里云、腾讯云、支付宝小程序云)。创建好之后,右击生成的uniCloud文件夹关联你的服务空间。<br>————————————————</p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185627244-974989424.png"></p>
<p> </p>
<h4>创建云函数(<span style="color: rgba(255, 102, 0, 1)">切记创建完右键上传到云空间</span>)</h4>
<p>右击<code>cloudfunctions</code>文件夹选择<code>新建云函数/云对象</code>选项去创建你的云函数。创建完并添加完代码后,右击你创建的云函数文件夹上传部署你的云函数。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185658575-1551794426.png"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185705831-928053950.png"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1949145/202411/1949145-20241121185712312-672626979.png"></p>
<p> 云函数代码</p>
<div class="cnblogs_code">
<pre>'use strict'<span style="color: rgba(0, 0, 0, 1)">;
const db </span>=<span style="color: rgba(0, 0, 0, 1)"> uniCloud.database()
exports.main </span>= async (event, context) =><span style="color: rgba(0, 0, 0, 1)"> {
const res </span>=<span style="color: rgba(0, 0, 0, 1)"> await uniCloud.getPhoneNumber({
appid: </span>'__UNI__872BDC2', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数</span>
provider: 'univerify'<span style="color: rgba(0, 0, 0, 1)">,</span>
<span style="color: rgba(0, 0, 0, 1)"> access_token: event.access_token,
openid: event.openid
});
console.log(res); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> res里的数据格式 { code: 0, success: true, phoneNumber: '186*****078' }</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> res
};</span></pre>
</div>
<p>一键登录代码</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">login() {
let _this </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">
uni.login({
provider: </span>'univerify'<span style="color: rgba(0, 0, 0, 1)">,
univerifyStyle: { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自定义登录框样式</span>
"fullScreen": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"title": '快速登录'<span style="color: rgba(0, 0, 0, 1)">,
</span>"backgroundColor": "#ffffff"<span style="color: rgba(0, 0, 0, 1)">,
</span>"phoneNum"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"color": "#000000", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 手机号文字颜色 默认值:#000000</span>
"fontSize": "18" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 手机号字体大小 默认值:18</span>
<span style="color: rgba(0, 0, 0, 1)"> },
</span>"slogan"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"color": "#8a8b90", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">slogan 字体颜色 默认值:#8a8b90</span>
"fontSize": "12" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> slogan 字体大小 默认值:12</span>
<span style="color: rgba(0, 0, 0, 1)"> },
</span>"icon"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"path": "/static/logo.png" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo</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)"> "closeIcon": {</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "path": "/static/none.png" // 自定义关闭按钮,仅支持本地图片。 HBuilderX3.3.7+版本支持</span>
<span style="color: rgba(0, 128, 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, 128, 0, 1)"> 其他登录方式</span>
"otherLoginButton"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"visible": "true", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 是否显示其他登录按钮,默认值:true</span>
"title": "短信验证码登录", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 其他登录方式按钮文字 默认值:“其他登录方式”</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>
"authButton"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"normalColor": "#EF801B", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 授权按钮正常状态背景颜色 默认值:#3479f5</span>
"highlightColor": "#EF801B", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)</span>
"disabledColor": "#EF801B", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)</span>
"textColor": "#ffffff", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 授权按钮文字颜色 默认值:#ffffff</span>
"title": "本机号码一键登录" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 授权按钮文案 默认值:“本机号码一键登录”</span>
<span style="color: rgba(0, 0, 0, 1)"> },
</span>"privacyTerms"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"defaultCheckBoxState": <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 条款勾选框初始状态 默认值: true</span>
"prefix": "我已阅读并同意", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 条款前的文案 默认值:“我已阅读并同意”</span>
"suffix": "并使用本机号码登录", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 条款后的文案 默认值:“并使用本机号码登录”</span>
"textColor": "#666666"<span style="color: rgba(0, 0, 0, 1)">,
</span>"termsColor": "#2D93EC"<span style="color: rgba(0, 0, 0, 1)">,
</span>"privacyItems": [ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效</span>
<span style="color: rgba(0, 0, 0, 1)"> {
</span>"url": "https://app.sheyuntai.com/automatic/m6190.agreement/content.html?id=1&version=m6190", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 点击跳转的协议详情页面</span>
"title": "用户服务协议" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 协议名称</span>
<span style="color: rgba(0, 0, 0, 1)"> },
{
</span>"url": "https://app.sheyuntai.com/automatic/m6190.agreement/content.html?id=2&version=m6190", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 点击跳转的协议详情页面</span>
"title": "隐私政策" <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 协议名称</span>
<span style="color: rgba(0, 0, 0, 1)"> }
]
},
},
success(res) { </span><span style="color: rgba(0, 128, 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, 128, 0, 1)"> 在得到access_token后,通过callfunction调用云函数</span>
<span style="color: rgba(0, 0, 0, 1)"> uniCloud.callFunction({
name: </span>'getPhoneNumber', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数名称</span>
data: { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">传给云函数的参数</span>
'access_token': res.authResult.access_token, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 客户端一键登录接口返回的access_token</span>
'openid': res.authResult.openid <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 客户端一键登录接口返回的openid</span>
<span style="color: rgba(0, 0, 0, 1)"> },
success(callRes) {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 一键登录<span style="color: rgba(255, 102, 0, 1)">这里拿到了手机号</span></span>
<span style="color: rgba(0, 0, 0, 1)"> _this.$api
.post(global.apiUrls.xxx, {
mobile: callRes.result.phoneNumber //获取到的手机号
})
.then((user) </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, 255, 1)">catch</span>(err =><span style="color: rgba(0, 0, 0, 1)"> {
uni.closeAuthView()
setTimeout(() </span>=><span style="color: rgba(0, 0, 0, 1)">{
_this.$message.info(user.data.errMessage);
},</span>100<span style="color: rgba(0, 0, 0, 1)">)
})
},
fail(callErr) {
console.log(</span>'调用云函数出错' +<span style="color: rgba(0, 0, 0, 1)"> callErr)
uni.closeAuthView()
},
complete() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> uni.closeAuthView() //关闭授权登录界面</span>
console.log('complete--------'<span style="color: rgba(0, 0, 0, 1)">);
}
})
},</span></pre>
</div>
<p> 至此完结。</p><br><br>
来源:https://www.cnblogs.com/qdjj/p/18561344
頁:
[1]