uni-app微信小程序一键登录

前言

实现微信一键登录的流程:
① 微信小程序 口端获取临时凭证code(code只能被消费一次)② 将code交给后端
③ 后端拿到code,向微信 服务器Q发起请求,拿到openid(openid代表微信用户在一个小程序中的唯一标识,另外拓展一下unionid代表微信用户在企业中的唯一标识)
④ 后端查询数据库是否存在这个openid,存在则登录,返回token,不存在则注册账号,登录,返回token

流程图

主要使用如下方法

1、uni.getUserInfo()获取到用户的头像、昵称、手机号等信息,不过手机号需要企业身份才可以

uni.getUserInfo({
    provider: 'weixin',
    success: function(info) {

        获取用户信息成功
        console.log(info.userInfo)
    }
})

2、通过uni.login() 拿到临时凭证code

uni.login({
        provider: 'weixin',
        success: function (loginRes) {
            //    打印临时凭证
            console.log(loginRes.code)
        }
});

核心代码

<button class="submit-btn" v-else open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"> 一键授权登录 </button>
 

/**
 * 获取用户手机授权
 * @param e 手机号授权事件对象
 */
const getPhoneNumber = async (e) => {
  if (e.detail.errMsg !== 'getPhoneNumber:ok') return false

  // 第一步

   uni.getUserProfile({
        desc: '获取你的昵称、头像、地区及性别',
        success: (res) => {

                // 第二步

                uni.login({
                      provider: 'weixin',
                      success: (res) => {
                        if (res.code) {                          

                                const requestParams= {
                                        code: userCode as string,
                                        phoneCode: params.phoneCode,
                                        avatarUrl: params.wxUser?.avatarUrl, // 微信头像
                                        encryptedData: params.encryptedData,
                                        iv: params.iv,
                                        sex: params.wxUser?.gender,
                                        userName: params.wxUser?.nickName,
                                 }

                                // 第三步 调用后端接口 ...

                        } else {
                          uni.showToast({
                            title: res.errMsg,
                            icon: 'none',
                            duration: 2000,
                          })
                        }
                      },
                      fail: () => {
                        reject(new Error())
                      },
            })

        },
        fail: () => {
            showToast('您拒绝了请求,暂时不能正常使用小程序', 'none')
        },
   })
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值