如何消除JQuery POST请求登录外部网站时的确认弹窗?
解决跨域登录时的授权/密码提示弹窗问题
这个弹窗主要分两种情况,对应不同的解决方法:
一、浏览器自带的密码管理提示
如果弹窗是浏览器弹出的“是否保存/使用登录信息”,这是浏览器的自动填充机制触发的,解决方法需要配合目标网站(https://url.com)的代码调整:
- 让目标网站在处理登录的表单元素上添加
autocomplete="off"或autocomplete="new-password"属性,阻止浏览器识别为登录表单并触发提示。 - 如果目标网站是通过纯后端接口验证
sessionkey,无需前端表单提交,可以直接跳过前端输入框步骤,调用验证接口,从根源上避免触发浏览器的密码检测。
二、目标网站的授权提示
如果弹窗是目标网站自身弹出的“是否接受来自XX站点的登录信息”,这是目标网站的安全验证机制,需要:
- 联系目标网站的开发团队,将你的站点域名加入他们的信任白名单,当来自白名单的域名通过
postMessage传递登录信息时,自动跳过授权提示。 - 考虑改用标准的跨域身份认证方案(比如OAuth2.0授权码模式),这类方案可以预先配置信任关系,无需每次手动确认授权。
另外,你的代码有个小问题需要修正:window.addEventListener的第三个参数不能传TARGET_URI,正确用法是传入选项对象或布尔值,同时必须验证消息来源防止恶意攻击,修正后的代码如下:
function login() { var TARGET_URI = "https://url.com"; var SESSIONKEY = "<?php echo $login["response"]->SessionKey; ?>"; var USERNAME = "<?php echo $account["username"]; ?>"; var wnd = window.open(TARGET_URI); if (wnd === null) { return; } window.addEventListener('message', function(msg) { // 验证消息来源,防止恶意请求 if (msg.origin !== TARGET_URI) return; wnd.postMessage( {"msg": "user_session_login", "username": USERNAME, "sessionkey": SESSIONKEY }, TARGET_URI ); $("#waiting").hide(); $("#complete").show(); window.close(); }, { once: true }); // 只监听一次消息,避免重复触发 }
内容的提问来源于stack exchange,提问作者charlie
相关产品推荐
相关产品推荐

