微信授权登录02-移动端

目录

## 前言

1.准备工作

1.1 网站域名

1.2 微信公众号

2.授权登录开发

2.1 前端开发

2.1.1 调起微信授权页面

## 调起微信授权页面效果图

2.1.2 用户允许授权后回调处理

2.2 后端开发

2.2.1  根据code查询用户信息

2.2.2 自动注册登录

## 后记


## 前言

上一篇写了PC端微信授权登录,本篇对移动端微信授权登录的实现做个简单记录。区别在于前者基于微信开放平台授权,后者基于公众平台授权。一个是电脑上扫码登录,一个是手机上授权后登录。

上一篇:《微信授权登录01-PC端》

1.准备工作

1.1 网站域名

需要有个外网可访问的已备案域名,作为网站微信授权登录用。

1.2 微信公众号

需要在微信公众平台申请公众号(服务号/订阅号),在基本配置中获取开发者ID(AppID),在公众号设置-功能设置中配置网站授权等域名。

公众平台地址:https://mp.weixin.qq.com/

2.授权登录开发

2.1 前端开发

2.1.1 调起微信授权页面

​//微信登录
const wxLogin = function () {
    let protocol = window.location.protocol;
    let host = window.location.host;
    let redirect_uri = protocol + '//' + host + '/login';
    let appId = 'xxxxx'; //公众号AppID
    let wxUrlStart = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId + '&redirect_uri=';
    let wxUrlEnd = '&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect';
    let allUrl = wxUrlStart + encodeURIComponent(redirect_uri) + wxUrlEnd;
    window.location.replace(allUrl);
}

​

## 调起微信授权页面效果图

首次登录能调起这个授权页说明以上步骤都已OK,如出现提示:“redirect_uri域名与后台配置不一致”,大概率是因为公众平台上网站授权域名没配置好,需要和redirect_uri这里的当前环境域名保持一致才行。

2.1.2 用户允许授权后回调处理

用户允许授权后会自动跳转至自定义的回调地址redirect_uri,并带上公众平台返回的code,拿到这个code去后台查询用户信息进行后续自动注册登录操作。

//获取微信授权重定向后的code
  let code = getUrlParam('code');
  if (code) {
    //微信授权自动注册登录
       httpPost('/api/user/wxLogin', {code: code}).then((res) => {
      setUserToken(res.data)
      router.push('/chat')
   }).catch((e) => {
      ElMessage.error('登录失败,' + e.message)
    })
  } 

//页面重定向获取URL中参数值
const getUrlParam = function(queryName) {
    const queryString = window.location.search;
    const params = new URLSearchParams(queryString);
    const value = params.get(queryName);
    return value ? decodeURIComponent(value) : null;
}

2.2 后端开发

2.2.1  根据code查询用户信息

先拿code获取AccessToken,再拿AccessToken获取用户的openid、昵称等信息,其中openid是用户唯一标识,可以拿来注册登录用。

需要用到的接口地址:

获取AccessToken:https://api.weixin.qq.com/sns/oauth2/access_token

获取用户信息:https://api.weixin.qq.com/sns/userinfo

具体代码开发可参考官方接口文档:网站应用微信登录开发指南

2.2.2 自动注册登录

拿到用户openid后即可作为用户唯一标识进行注册登录操作。

## 后记

至此开发工作已完成,在域名对应的服务器上部署启动项目,测试功能OK即可。

最后提一下自己的小站(支持微信一键登录),提供了多种AI对话及MJ绘画功能。

体验地址:https://ai.xiaomaicoder.com/login,欢迎体验交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nios-II编程入门实验

文章目录 一 Verilog实现流水灯二 Nios实现流水灯2.1 创建项目2.2 SOPC添加模块2.3 SOPC输入输出连接2.4 Generate2.5 软件部分2.6 运行结果 三 Verilog实现串口3.1 代码3.2 引脚3.3 效果 四 Nios2实现串口4.1 sopc硬件设计4.2 top文件4.3 软件代码4.4 实现效果 五 参考资料六 …

nodeJs用ffmpeg直播推流到rtmp服务器上

总结 最近在写直播项目 目前比较重要的点就是推拉流 自己也去了解了一下 ffmpeg FFmpeg 是一个开源项目,它提供了一个跨平台的命令行工具,以及一系列用于处理音频和视频数据的库。FFmpeg 能够执行多种任务,包括解封装、转封装、视频和音频…

Ps各种修改文字超实用方法

介绍 在日常生活中,难免会遇到进行文字修改的ps场景,此时就需要用到比较专业的ps进行文字修改,博主特意整合了多种情况下的文字p图方法进行记录,但是不包含全部情况,只记录日常中常见的情况,也可以解决大部分场景了 原图有可用文字素材 在p图时,我们可以先观察我们要p的图中…

【ARMv8/v9 系统寄存器 5 -- CPU ID 判断寄存器 MPIDR_EL1 使用详细介绍】

文章目录 寄存器名称: MPIDR_EL1寄存器结构:主要功能和用途亲和级别(Affinity Levels)简介CORE ID 获取函数 在ARMv8-A架构中, MPIDR_EL1寄存器是一个非常重要的系统寄存器,它提供了关于处理器在其物理和逻辑配置中的位置的信息。…

Linux下安装JDK并配置环境变量

一、Oracle官网下载jdk 1、官网地址 https://www.oracle.com/java/technologies/downloads/#java17 2、命令下载 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 3、解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz 4、配置环境变量 ec…

webrtc windows 编译,以及peerconnection_client

webrtc windows环境编译,主要参考webrtc官方文档,自备梯子 depot tools 安装 Install depot_tools 因为我用的是windows,这里下载bundle 的安装包,然后直接解压,最后设置到环境变量PATH。 执行gn等命令不报错&…

SQLite .journal 文件

在之前插入大量数据测试的时候,发现在数据库文件同级目录下会产生一个同名.journal的文件,并且不是一直会存在,而是生成一会就会自动删除,然后继续生成继续删除,直到数据插入完成。 初步猜测,应该是类似 re…

rust开发web服务器框架,github排名对比

Rocket Star最多的框架 github仓库地址:GitHub - rwf2/Rocket: A web framework for Rust. Rocket 是一个针对 Rust 的异步 Web 框架,重点关注可用性、安全性、可扩展性和速度。 Axum 异步运行时 githuh仓库地址:GitHub - tokio-rs/axum: …

Unity开发中导弹路径散射的原理与实现

Unity开发中导弹路径散射的原理与实现 前言逻辑原理代码实现导弹自身脚本外部控制脚本 应用效果结语 前言 前面我们学习了导弹的追踪的效果,但是在动画或游戏中,我们经常可以看到导弹发射后的弹道是不规则的,扭扭曲曲的飞行,然后击…

国产操作系统下使用dpkg命令管理软件包 _ 统信 _ 麒麟 _ 中科方德

往期好文:国产操作系统下Chrome的命令行使用 | 统信 | 麒麟 Hello,大家好啊!在Linux系统中,dpkg是Debian包管理系统的基础命令工具,它允许用户安装、卸载、查询和管理软件包。在国产操作系统如统信UOS和麒麟KOS、中科方…

精选多个炫酷的数据可视化大屏(含源码),拿走就用~

末尾有链接 演示地址:可视化大数据展示中心 (null.fit) 可视化大数据展示模板-科技语者 (chgskj.cn)

Nginx 基于域名的虚拟主机的配置实验

目录 虚拟主机解释 实验介绍 修改配置文件 一:创建2个虚拟主机的网页根目录 二:修改2个虚拟主机的首页的内容 三:真实机器添加域名解析记录 四:测试 虚拟主机解释 Nginx的虚拟主机是指一台服务器上同时托管多个网站的能力。…

Mysql 日志(redolog, binlog, undoLog)

重做日志-redolog 是什么 innoDB存储引擎层面的日志,它的作用是当 数据更新过程中数据库发生异常导致提交的记录丢失 为什么 mysql的基本存储结构是页(记录都在页里面),所以更新语句时,mysql需要先把要更新的语句找…

厉害了!12秒将百万数据通过EasyExcel导入MySQL数据库中

一、写在开头 我们在上一篇文章中提到了通过EasyExcel处理Mysql百万数据的导入功能(一键看原文),当时我们经过测试数据的反复测验,100万条放在excel中的数据,4个字段的情况下,导入数据库,平均耗…

LibreNMS简介

目录 1 LibreNMS简单介绍1.1 LibreNMS介绍 2 安装2.1 Ubuntu安装1、安装依赖2、添加 librenms 用户3、下载 LibreNMS4、设置权限5、安装 PHP 依赖项6、设置时区7、配置 MariaDB8、配置 PHP-FPM9、配置 Web 服务器10、启用 lnms 命令11、配置 snmpd12、cron13、启用调度程序14、…

[Flutter GetX使用] Getx路由和状态管理-GetController使用过程中的踩坑记录

文章目录 问题 - Get.find() 报错!原因总结A:路由和控制器设计a1:项目中的Get路由aa1.项目路由结构aa2.本项目路由的注意点: B: GetController的冷知识C: 总结来看D: 一些参考资料 问题 - Get.find() 报错! 刚接触Getx, 遇到 Get.find()确找不到, 进而报错的问题, 一时间有点没…

AI算法-高数4-偏导数(理解梯度下降算法基础)

宋浩老师:6.3 偏导数_哔哩哔哩_bilibili 示例: 几何意义:

nodejs复习笔记

最近在复习nodejs,整理了一些笔记来记录和分享。 非常惭愧,我之前关于nodejs学习的一篇文章《nodejs全栈开发学习笔记》已经是2019年6月份的时候了,大概浏览了一下,发现当时很多不明白的地方,现在通过复习&#xff0c…

【大数据】HDFS、HBase操作教程(含指令和JAVA API)

目录 1.前言 2.HDFS 2.1.指令操作 2.2.JAVA API 3.HBase 3.1.指令操作 3.2.JAVA API 1.前言 本文是作者大数据专栏系列的其中一篇,前文中已经详细聊过分布式文件系统HDFS和分布式数据库HBase了,本文将会是它们的实操讲解。 HDFS相关前文&#x…

大学生体质测试|基于Springboot+vue的大学生体质测试管理系统设计与实现(源码+数据库+文档)

大学生体质测试管理系统 目录 基于Springboot+vue的大学生体质测试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 4教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算…