首页 > 其他分享 >uniapp+vue H5页面实现微信公众号授权登录

uniapp+vue H5页面实现微信公众号授权登录

时间:2024-05-08 17:35:38浏览次数:17  
标签:uniapp code flex color 微信 top vue font data

<template>
    <view class="my-userinfo-container">
        <!-- 头像和昵称区域 -->
        <view class="top-box">
            <image :src="form.headimgurl" class="avatar"></image>
            <view class="nickname">{{form.nickname}}</view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                form: {
                    nickname: '',
                    headimgurl: ''
                }
            }
        },
        onl oad() {
            this.login()
        },
        methods: {
            // 截取url中的code
            getUrlCode(variable) {
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i = 0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    if (pair[0] == variable) {
                        return pair[1];
                    }
                }
                return (false);
            },
            async login() {
                const userInfo = uni.getStorageSync("userinfo")
                if (!this.$utils.isNull(userInfo)) {
                    this.form = userInfo
                } else {
                    // 获取url上的code
                    let code = this.getUrlCode('code')
                    console.log(code)
                    if (code) {
                        //授权登录
                        const res = await this.$api.WeChatLogin({
                            'weChatCode': code
                        });

                        if (res.data.rcrm.RC == "1") {
                            this.$u.toast("授权成功")
                            this.form = res.data.results.user_data;
                            uni.setStorageSync('userinfo', res.data.results.user_data)
                        } else {
                            this.$u.toast('授权失败:' + res.data.rcrm.RM)
                        }
                    } else {
                        // code 不存在,走微信网页授权逻辑 
                        // 当前网页的url,供微信重定向使用 
                        let loc_href = = encodeURIComponent(window.location.href);

                        // this.$config.weChat.appID 为微信公众号的appid 
                        let wxUrl =
                            `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.$config.weChat.appID}&redirect\_uri=${loc_href}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`

                        // 跳转链接获取code 
                        location.href = wxUrl
                    }
                }
            }
        }
    }
</script>

<style lang="scss">
    page {
        background-color: #f4f4f4;
    }

    .my-userinfo-container {
        height: 100%;
        background-color: #f4f4f4;

        .top-box {
            height: 400rpx;
            background-color: #55aaff;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;

            .avatar {
                width: 90px;
                height: 90px;
                border-radius: 45px;
                border: 2px solid #FFF;
                box-shadow: 0 1px 5px black;
            }

            .nickname {
                font-size: 16px;
                color: #ffffff;
                font-weight: bold;
                margin-top: 10px;
            }

            .phone {
                font-size: 13px;
                color: #515151;
                margin-top: 3px;
            }

            .merchant {
                font-size: 13px;
                color: #515151;
                margin-top: 3px;
            }
        }
    }

    .panel-list {
        padding: 0 10px;
        position: relative;
        top: 30px;

        .panel {
            background-color: white;
            border-radius: 3px;
            margin-bottom: 8px;


            .panel-body {
                display: flex;
                justify-content: space-around;

                .panel-item {
                    display: flex;
                    flex-direction: column;
                    align-items: center;
                    justify-content: space-around;
                    padding: 15px 0;
                    font-size: 13px;

                    .icon {
                        width: 35px;
                        height: 35px;
                    }

                    .txt {
                        margin-top: 10px;
                    }
                }
            }
        }
    }

    .panel-list-item {
        display: flex;
        justify-content: space-between;
        align-items: center;
        font-size: 15px;
        padding: 0 10px;
        line-height: 45px;
    }
</style>

 

标签:uniapp,code,flex,color,微信,top,vue,font,data
From: https://www.cnblogs.com/xq-1209/p/18180328

相关文章

  • 拉取VUE并运行
    一、通过从git项目中拉取项目后初次并启动运行1、在vscode从git获取拉取项目2、拉取项目后启动运行(需要先安装npm ---npminstall)安装报错 解决:1、复制这个路径,打开文件夹 (找到npm的安装路径,查看是否有node.exe的启动文件。)打开后会发现没有 2、找到node的安装......
  • Vue
    VUE2https://v2.cn.vuejs.org/(1)介绍VUE是渐进式框架可以一点一点地使用它,只用一部分,也可以整个工程都使用它Vue特点易用通过HTML、CSS、JavaScript构建应用灵活不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。高效20kBmin+gzip运行大小超快虚......
  • 微信小程序加载更多
    背景:博客小程序开发,涉及博客列表加载更多需求。前提:接口:https://abc.com/api/xx?pageSize=xx&page=xxview代码:<viewclass="container"><viewwx:for="{{items}}"wx:key="id"><text>{{item.cid}}--{{item.title}}</text>......
  • Vue2工程化介绍
    Vue2项目[基于vue-cli]工程化【一】环境搭建06-Vue-cli-刘清政-博客园(cnblogs.com)安装node使用npm/cnpmnpm换源:npmconfigsetregistryhttps://registry.npmmirror.com安装vue-clicnpminstall-g@vue/cli#安装脚手架cnpminstall-g@vue/cli#切换目录......
  • 解决Vue项目在IIS部署中路由不存在导致的404错误问题
    最近Vue项目部署到IIS时遇到了一个问题:当输入不存在的路由时,页面会报下图的404错误,这样会导致我们的信息暴露,非常不安全,解决这个问题也很简单,通过配置网站的url重写即可解决这个问题。参考文章:https://blog.csdn.net/qq_40323256/article/details/124384969解决方法:给IIS部署的......
  • 探索网站支付系统的奥秘,从Vue3和Spring Boot开始(入门级项目实战+在线教程)附赠项目源码
    你是否曾经在购物时,对着电脑屏幕前的“支付成功”四个字感到好奇?这背后的秘密究竟是什么?今天,让我们一起揭开支付系统的神秘面纱,探索其背后的技术实现。在这个基于Vue3和SpringBoot的支付项目实战中,我们将带你一步步了解支付系统的实现思路。这个项目不仅解决了常用支付方式的......
  • 27.企业微信-L2
    importrequestsclassTestWework:deftest_get_token(self):self.corp_id="ww0500b1708efeb406"self.corp_secret="5fas7s3wQzC6k5W11SqZ1dxMcXvC57yKXi_NMVXu4pkBNY"self.base_url="https://qyapi.weixi11n.qq.......
  • vue2-事件总线$bus的使用
    作用实现不同组件之间进行通信(非父子关系)。 原理$bus就是vue原型上添加的一个vue实例,用于存储、监听以及触发事件。 实现步骤在main.js文件中注册事件总线Vue.prototype.$bus=newVue();在需要发送信息的组件中发送事件this.$bus.$emit("eventname")//无参......
  • Vue —兼容 Vue 2.0到 Vue 3.0 的注意事项
    Vue3与Vue2之间存在一些重要的变化和改进,因此在进行兼容性处理时需要注意一些关键点。1.CompositionAPIVue3引入了CompositionAPI,与Vue2的OptionsAPI不同。如果您在Vue2中使用了OptionsAPI,可以继续使用,但建议尝试使用CompositionAPI,因为它提供了更好......
  • vue多页面应用
    多页面应用本身和单页面应用没什么差别,无非是多了几个入口点。入口点多的话,还可以写个函数扫描路径取添加入口点。比较让人好奇的是路径的问题。我们要开发的时候要体现目录层级接口,所以入口文件是一层套一层的。但是部署后访问路径应该很短才行,最好是顶级路径。但这又只能改目......