uniapp微信浏览器H5授权微信登录

1.准备一个触发微信登录的按钮

<button class="wechat-logo" @click="getWeChatCode">微信授权登录</button>

2.用户点击弹出授权页
微信浏览器的登录配置
scope为snsapi_base时, 为静默登录
scope为snsapi_userinfo时,会弹出“xxx申请获得你的微信头像、昵称、地区和性别信息”这样的弹出框,需要经过用户同意

// 看地址中有没有code参数,如果没有code参数的话则请求微信官方的接口并获取包含code的回调链接
getWeChatCode() {
    //用于退出登录回来不会再调一次授权登录
    uni.setStorageSync('wechat_login_tag', 'true');
                
    const appID = '';  //公众号appID
    const callBack = ''; //回调地址 就是你的完整地址登录页
                
    //通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
    window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
                    appID + '&redirect_uri=' + encodeURIComponent(callBack) +
                    '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
},
3.因为授权成功微信会跳转到我们设置的回调地址,所以还要在页面生命周期onLoad中设置一下

onLoad() { const hasWechatLogin = uni.getStorageSync('wechat_login_tag') || null; if(hasWechatLogin) { this.checkWeChatCode(); } }

在methods中设置以下方法:

// 重定向回来本页面检查有没有code
checkWeChatCode() {
    let code = this.getUrlCode('code');
    if(code) {
        this.handleToLogin(code)
    }
},
// 正则匹配请求地址中的参数函数
getUrlCode(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||[, ''])[1].replace(/\+/g, '%20')) || null
},
// 把后端需要的code以及其他信息调用接口传过去
//比如调用接口loginIn
handleToLogin(code) {
    loginIn({
        code,
    }).then(res => {
        console.log('登录成功')
        uni.redirectTo({
            url: '/pages/index/index'
        })
    })
}

以上就是完整流程,但有几个需要注意的点

1.引导用户跳转授权那个链接 window.location.href 那串,顺序不能变动,最好直接复制我这个
2.那个appID,记住,一定要是公众号的ID ,一般是如果是小程序同步的H5,那就是这个小程序关联的那个公众号ID,不是开放平台的ID
3.回调地址是完整的链接,所以,要确保在公众号里设置了授权回调域名 ,你用的这个回调地址的域名,必须和公众号设置的一致(可以去微信公众平台登录关联的公众号看看有没有设置)
链接: 微信公众平台

完整代码如下:

<template>
    <button class="wechat-logo" @click="getWeChatCode">微信授权登录</button>
</template>

<script>
export default {
    onLoad() {
        const hasWechatLogin = uni.getStorageSync('wechat_login_tag') || null;
        if(hasWechatLogin) {
            this.checkWeChatCode();
        }
    },
    methods: {
        // 重定向回来本页面检查有没有code
        checkWeChatCode() {
            let code = this.getUrlCode('code');
            if(code) {
                this.handleToLogin(code)
            }
        },
        // 正则匹配请求地址中的参数函数
        getUrlCode(name) {
            return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||[, ''])[1].replace(/\+/g, '%20')) || null
        },
        // 看地址中有没有code参数,如果没有code参数的话则请求微信官方的接口并获取包含code的回调链接
        getWeChatCode() {
            //用于退出登录回来不会再调一次授权登录
            uni.setStorageSync('wechat_login_tag', 'true');
                        
            const appID = '';  //公众号appID
            const callBack = ''; //回调地址 就是你的完整地址登录页
                        
            //通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
            window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
                            appID + '&redirect_uri=' + encodeURIComponent(callBack) +
                            '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
        },
        // 把后端需要的code以及其他信息调用接口传过去
        //比如调用接口loginIn
        handleToLogin(code) {
            loginIn({
                code,
            }).then(res => {
                console.log('登录成功')
                uni.redirectTo({
                    url: '/pages/index/index'
                })
            })
        }
    }        
}
</script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值