网站微信扫码登录回调不跳转问题

在开发微信扫码登录功能时遇到回调不跳转的问题。通过代码实例展示了如何在点击事件中显示二维码,发现去掉self_redirect后页面不跳转。经过排查,确定是谷歌浏览器跨域的iframe标签导致。在iframe中添加sandbox属性并设置允许脚本、顶级导航和同源策略后,成功解决跳转问题。

最近项目需要开发新功能,微信扫码登录,先上代码:

步骤1:在页面中先引入如下JS文件(支持https):

http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js

步骤2:在需要使用微信登录的地方实例以下JS对象:(我是在点击事件触发)

var obj = new WxLogin({
 self_redirect:true,//是否在显示的二维码区域跳转,默认是false
 id:"login_container", 
 appid: "", //
 scope: "", 
 redirect_uri: "",//需要微信授权域名一致
  state: "",
 style: "",
 href: ""
 });

以上代码昨晚页面显示了二维码,可以扫码登录,并且跳转,但是只会在二维码区域跳转,于是去掉 self_redirect这一项,结果是并不会跳转页面,于是百度了好多不跳转的原因
然后在大佬的帮助下,最终找到原因:在谷歌浏览器调试的时候,iframe标签跨域问题导致无法跳转。

加上这个代码之后sandbox=“allow-scripts allow-top-navigation allow-same-origin”,刷新页面再测,就没问题了,可以正常跳转了
以下项目中修改代码:

created() {
    // createScript(
    //   "http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"
    // );
    !(function(a, b, c) {
      function d(a) {
        var c = "default";
        a.self_redirect === !0
          ? (c = "true")
          : a.self_redirect === !1 && (c = "false");
       
### 微信登录授权回调URL配置教程 #### 配置授权回调URL的重要性 为了确保安全性和功能性,在微信登录过程中,正确配置授权回调URL至关重要。当用户完成微信并确认登录操作后,系统将依据此URL进行跳转,并携带必要的认证信息。 #### 设置授权回调URL的具体方法 对于微信开放平台的应用程序而言,开发者需在微信公众账号后台设定固定的回调地址模式。该地址应指向能够接收`code`参数的服务端接口位置[^1]。例如: ```plaintext https://passport.yhd.com/wechat/callback.do?code=CODE&state=STATE_VALUE ``` 其中,`CODE`是由微信服务器临时生成的一次性票据;而`STATE_VALUE`则是由客户端发起请求时传递过来的状态值用于防止CSRF攻击以及保持前后端状态同步。 #### 获取Access Token过程中的注意事项 一旦接收到带有有效`code`的HTTP GET请求至上述指定路径,则服务端应当立即调用微信官方API来换取用户的`access_token`。这一步骤涉及到向特定网址发送POST请求,并提供AppID、Secret及刚才获得的Code作为必要参数。 #### 实现跨域通信与前端交互逻辑 考虑到实际应用场景可能涉及同域名间的协作需求,因此还需特别注意处理好CORS(Cross-Origin Resource Sharing)策略设置问题。与此同时,在Vue.js框架下实现这一功能模块时,可以考虑采用iframe沙箱机制或者window.postMessage()方式来进行父子页面间的数据交换[^2]。 #### 示例代片段:处理回调函数(Node.js) 下面给出一段简单的Node.js示例代用来说明如何解析来自微信服务器传入的信息并作出相应回应: ```javascript const express = require('express'); const axios = require('axios'); // 创建Express实例 let app = express(); app.get('/wechat/callback', async (req, res) => { let code = req.query.code; try{ const response = await axios({ method:'post', url:`https://api.weixin.qq.com/sns/oauth2/access_token`, params:{ grant_type:"authorization_code", appId: "YOUR_APP_ID", // 替换成自己的APP ID secret: "YOUR_SECRET_KEY", // 替换成自己的SECRET KEY code: code, } }); console.log(response.data); // 进一步业务逻辑... res.send("Login Success!"); }catch(error){ console.error(error.message); res.status(500).send("Error occurred."); } }); app.listen(3000, ()=>{ console.log("Server is running on port 3000"); }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值