【发布时间】:2023-02-25 02:23:08
【问题描述】:
我正在构建一个流程,如果我的用户登陆主页,我会检查是否存在具有特定名称的有效 cookie。如果 cookie 不存在,用户将被重定向到login.php。
我向第三方 API 发出 POST 请求以使用 AJAX 和 PHP 代理对用户进行身份验证以绕过任何 CORS 问题。身份验证成功后,我会收到带有 authToken 的响应。我用它来创建一个带有 authToken 的令牌(我不必担心安全问题,特别需要使用 cookie)。然后我将用户重定向回主页。
但是,虽然我看到在我的网络活动中发生了重定向,更具体地说,对状态为 200 的 url 执行了 GET 请求,但实际页面并未在我的浏览器上呈现,因此重定向实际上并未发生。我的控制台或终端上没有收到任何错误。
这是我的主页代码,重定向到登录:
<?php
session_start();
if(!isset($_COOKIE['authToken'])){
header ("location: /login.php");
}
?>
用户尝试登录时的 AJAX POST 请求:
const submitButton = document.getElementsByClassName('login')[0];
submitButton.addEventListener('click', function(event) {
event.preventDefault();
const inputs = document.getElementsByTagName('input')
const emailAddress = inputs[0].value
const password = inputs[1].value
manageState().validateState();
data = {
name:'***',
password: '***',
userID: ***,
userSecret: ***
}
console.log('data', data)
jQuery.ajax({
type: "POST",
url: "proxy.php?url=https://***/****",
dataType: "json",
contentType: 'application/x-www-form-urlencoded',
data: data,
success: function (data){
console.log('success', data)
}
});
});
}
绕过 CORS 问题的 php 代理:
function makePostRequest($baseURL) {
global $redirect_url;
$ch = curl_init();
$data = http_build_query($_POST);
curl_setopt($ch, CURLOPT_URL, $baseURL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
if($e = curl_error($ch)) {
echo $e;
} else {
$json = json_decode($response, true);
createCookie($json['authToken']);
header("Location: $redirect_url");
exit();
}
}
以及创建 cookie 的函数 createCookie:
function createCookie($token){
global $redirect_url;
$cookie_name = 'authToken';
$cookie_value = strval($token);
setcookie($cookie_name, $cookie_value, time() + (20), "/"); //86400*30
}
将不胜感激任何帮助
【问题讨论】:
-
我不认为您可以从 Ajax 调用的 PHP 代码执行标头重定向,可以吗? PHP 代码的输出不会发送到浏览器,它只是返回给调用 JS 代码。
标签: javascript php ajax