Uni-app 小程序 微信登录 手机号登录

微信小程序 微信登录 微信手机号登录 公众号登陆

微信登陆逻辑大致分为3种 不过最终目的都是一样的。返回微信的唯一标识,小程序的话只能获取到code。通过JSON Web Token (JWT)生成一个token,并返回至客户端。APP的微信登录可以直接获取到openid,可以直接作为唯一标识使用。

1 微信静默授权登录(微信小程序)

通过获取code 和后端换取 openid 实现

uni.login({
  provider: 'weixin', //使用微信登录
  success: function (loginRes) {
    console.log(loginRes.authResult);
    //获取到的code通过接口走自己的逻辑
  }
});

2用户授权登录(微信小程序)

微信小程序端用户头像昵称获取规则已调整

uni.login({
  provider: 'weixin',
  success: function (loginRes) {
    console.log(loginRes.authResult);
    // 获取用户信息
    uni.getUserInfo({
      provider: 'weixin',
      success: function (infoRes) {
        console.log('用户昵称为:' + infoRes.userInfo.nickName);
        //现在拿不到头像昵称了 默认返回 nickName = '微信用户'
        //需要自定义逻辑给用户一个默认的头像昵称可供修改
      }
    });
  }
});

3 手机号登录

手机号登录需要用户主动点击按钮触发登录机制(必须手动点击)需要页面有button 按钮

<button type='primary' open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信登录</button>
//授权手机号
			getPhoneNumber(e) {
				let that = this
				uni.login({
					provider: 'weixin',
					success: function(loginRes) {
						let dataPhone = {
							code: loginRes.code,//uni.login获取到的code 和getPhoneNumber(e)中的code 是不一样的
							encryptedData: e.detail.encryptedData,
							iv: e.detail.iv,
						}
						//通过这些参数走后端接口获取手机号信息实现登录
					}
				});

			},

4.公众号H5登录

网页授权流程分为四步: 官网地址

1 引导用户进入授权页面同意授权,获取code
2 通过code换取网页授权access_token(与基础支持中的access_token不同)
3 如果需要,开发者可以刷新网页授权access_token,避免过期
4 通过网页授权access_token和openid获取用户基本信息

在这里插入图片描述

在这里插入图片描述
首先需要在微信开放平台 绑定上开发者,开发者具有开发调试的功能 可以在开发者工具上走公众号的微信登录,第一次登录需要授权,后边在登录就不会弹授权登录弹窗了,不过清除缓存的话还是可以授权的

判断是否授权登录
获取授权码。
code只能使用一次,有效期5分钟

var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=你自己的APPID&redirect_uri=授权完要去的页面&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'
window.location.href = url

页面上通过截取字符串 可以获取到code

function getUrlCode() { // 截取url中的code方法
        var url = location.search
        var code= new Object()
        if (url.indexOf("?") != -1) {
            var str = url.substr(1)
            var strs = str.split("&")
            for (var i = 0; i < strs.length; i++) {
                code[strs[i].split("=")[0]] = (strs[i].split("=")[1])
            }
        }
        return code
    }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚博TRUE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值