本文讲解了使用uniapp一键登录功能的详细步骤,实现效果如图:
点击左侧【一键登录】菜单下的【基础配置】,同意协议并开通
ApiKey和ApiSecret在后续将用到
(1) 右键unicloud目录,点击【关联云服务空间或项目】
(2) 如果没有云服务空间,点击【新建】
(3) 在新打开的网页弹窗中,填写服务空间的名称,并点击创建
(4) 回到HBuilderX,选择一个服务空间,点击【关联】按钮
注意:每次修改了云函数文件内容,都需要重新上传部署
五、云函数设置右键/uniCloud目录,选择【打开uniCloud Web控制台】,设置如下内容:
1. 云函数URL化的path(1). 找到上传的云函数,点击详情
2. 跨域配置,设置安全域名 六、模块配置
在项目的manifest.json中开启【一键登录】
公共js文件,主要涉及两个相关API:
export default {/** * 一键登录预登录检查 * @return {boolean} 是否支持一键登录 */pre_login(){uni.getProvider({ //获取可用的服务提供商service: 'oauth',success: function(res) {console.log(res.provider) // ['weixin', qq', 'univerify']}});return new Promise((resolve, reject)=>{uni.preLogin({ //预登录provider: 'univerify', //用手机号登录success() {resolve(true)},fail(err) { //预登录失败console.log(`预登录失败(${err.errCode})`, err.errMsg)resolve(false)}})})},/** * 本机号码一键登录 */async fast_login(){return new Promise((resolve, reject)=>{uni.login({ //正式登录,弹出授权窗provider: 'univerify',univerifyStyle: { // 自定义登录框样式"fullScreen": true, // 是否全屏显示,true表示全屏模式,false表示非全屏模式,默认值为false。"backgroundColor": "#ffffff", // 授权页面背景颜色,默认值:#ffffff "phoneNum": {"color": "#000000", // 手机号文字颜色 默认值:#000000 },"authButton": {"normalColor": "#3479f5", // 授权按钮正常状态背景颜色 默认值:#3479f5 "highlightColor": "#2861c5", // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持) "disabledColor": "#73aaf5", // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持) "textColor": "#ffffff", // 授权按钮文字颜色 默认值:#ffffff "title": "本机号码一键登录" // 授权按钮文案 默认值:“本机号码一键登录” }},success(res) { // 正式登录成功console.log(res.authResult); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'}resolve(res.authResult)// 在得到access_token后,通过callfunction调用云函数// uniCloud.callFunction({// name: 'login', // 云函数名称// data: { //传给云函数的参数// 'access_token': res.authResult.access_token, // 客户端一键登录接口返回的access_token// 'openid': res.authResult.openid // 客户端一键登录接口返回的openid// },// success(callRes) {// console.log('调用云函数成功' + callRes)// },// fail(callErr) {// console.log('调用云函数出错' + callErr)// },// complete() {// uni.closeAuthView() //关闭授权登录界面// }// })uni.closeAuthView() //关闭授权登录界面},fail(err) { // 正式登录失败console.log(`一键登录失败(${err.errCode})`, err.errMsg)reject(err)// uni.closeAuthView() //关闭授权登录界面}})})}}在登录页面中调用:
import service from "@/common/mp_service.js"async onLoad() {const can_login = await service.pre_login()if(can_login){this.fast_login()}},methods: {async fast_login() {try{const { access_token, openid } = await service.fast_login()console.log("uniapp一键登录", access_token, openid)// 登录操作,获取token和用户信息等操作}catch(e){console.log('一键登录失败', e)}},}