H5页面实现微信授权登录

需求描述

用户通过扫码海报携带活动二维码跳转到h5页面,并且完成微信授权,完成授权的用户进入小程序后不再进行授权操作。这里边涉及到了两个大问题:

  1. 一是怎样在一个域名下部署两个项目;
  2. 二是用户点击授权之后跳转当前页,获取到code值后,什么时候向服务端发送授权请求。

问题分析

先讨论第一个问题?

首先第一个项目正常打包部署即可,比如主服务域名为:www.xxx.xxx;
然后,第二个项目的域名必须是是在主域名的后面拼接上项目路由,如:www.xxx.xxx/h5/;(h5只是路由名称,可以自定义)
对于前端来说,需要做以下操作:

1. 增加请求前缀,如图1
2. 配置路由信息,如图2
3. 修改模板文件index.html,如图3
4. 最后通过nginx将项目部署到服务器。

图1:

图2:

图3:

注意:如果你是通过vue开发的h5页面那么你只需要配置router文件就行,如果是原生开发的h5那么你就得配置.html入口文件。

就<meta base=/h5/ >做一说明:

 base标记定义了文档的基础URL地址,在文档中所有的相对地址形式的URL都是相对于这里定义的URL而言的。一篇文档中的<base>标记不能多于一个,必须放于头部,并且应该在任何包含URL地址的语句之前。

 第二个问题,授权问题

在h5页面点击授权后,重定向到当前项目 https://www.xxx.xxx/h5/

const jumpUrl = `https://www.xxx.xxx/h5/`

window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb20930d8128f9ba5&redirect_uri=${jumpUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
// location.herf 该url中除了重定向地址,其他的全是官方文档提供。

// 重定向后的页面url地址会携带用户的code值,例如:`https://www.xxx.xxx/h5/?code=xxxxxxxxxxxxxxxxxxxxxxx` 这种形式

 这样我们就能拿到用户code,再向服务端发送请求获取用户信息,在按照产品需求进行相应的操作。

以上是整个授权的流程,我在实现授权的过程中遇到了这样一个问题:

页面重定向之后是不会再去执行当前方法中后续代码的,所以不要在window.location.href 这段代码后立马去获取url中的code值以及后续的请求操作。(原因浏览器重定向后会刷新页面,对于单页应用而言会发生组件卸载和重新渲染)应该在页面的根组件生命周期钩子中获取url中相应的值,去进行后续操作。(由于我使用vue开发的h5页面,所以只需要在created钩子中进行判断获取),如果使用原生开发的话可以在onload函数中去获取。

总结

在开发过程中往往会遇到奇奇怪怪的小问题,但是解决这些问题往往是最基础最底层的知识点;希望能帮助到遇到同样问题的小伙伴,阅读中如果有异议或者不正确的地方欢迎评论,我会及时更新。

要在微信H5页面实现微信授权登录,可以按照以下步骤进行操作: 1. 在微信公众平台上申请开发者账号,并创建一个用于开发的公众号。 2. 在公众号设置中,将“网页授权域名”设置为你的H5页面所在的域名。 3. 引入微信JS-SDK,获取JS-SDK签名。 4. 在微信开放平台申请网页授权的方式,获取到AppID和AppSecret。 5. 在后端服务器中,通过AppID和AppSecret获取access_token和openid。 6. 在前端页面中,通过微信JS-SDK的wx.config初始化配置,包括appId、timestamp、nonceStr、signature等参数。 7. 调用微信JS-SDK的wx.ready方法,初始化成功后进行接下来的操作。 8. 在前端页面中,通过微信JS-SDK的wx.checkJsApi方法,判断当前客户端版本是否支持指定的js接口,如微信登录相关接口。 9. 在前端页面中,调用微信JS-SDK的wx.login方法,显示微信登录按钮,用户点击按钮后会调用wx.login方法,获取code。 10. 前端将获取到的code通过ajax等方式发送给后端服务器。 11. 后端服务器通过code、AppID和AppSecret等参数向微信服务器发送请求,获取access_token和openid。 12. 后端服务器将获取到的access_token和openid返回给前端。 13. 前端根据获取到的access_token和openid进行相应的处理,例如获取用户信息,实现微信登录功能。 需要注意的是,以上步骤中需要在微信公众平台、微信开放平台和自己的后端服务器进行相应的配置和开发工作,确保整个流程的正确性和安全性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值