我正在localhost:3000上运行React应用。我向默认XAMPP本地主机上的后端发出了axios请求,以设置cookie。在以前的尝试中,如果前端在默认的XAMPP本地主机中,则可以设置cookie。但是自从切换到react dev服务器后,localhost:3000。我无法设置Cookie。
这是我的php文件:
header("Access-Control-Allow-Origin: *");
require __DIR__ . './vendor/autoload.php';
use \Firebase\JWT\JWT;
if(isset($_POST)){
//grab secret key from .env file, remember to exclude from gitignore.
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$key = $_ENV['SECRET_KEY'];
//access post data to for jwt creation
$data = json_decode(file_get_contents("php://input"), true);
$timezone = new DateTimeZone('Asia/Kuching');
$expiry = new DateTime();
$expiry->setTimezone($timezone);
$expiry->modify("+2 days");
$date = $expiry->format("Y-m-d H:i:s.v");
$payload = array(
"ttl"=>$date,
"data"=>$data['tokenValue']
);
$jwt = JWT::encode($payload,$key);
setcookie("accessToken",$jwt,[
'expires'=>$date,
'path'=>'/',
'domain'=>'localhost',
'secure'=>false,
'httponly'=>true,
'samesite'=>'None'
]);
}
可能是什么问题?我确实将域从“ localhost”更改为“ localhost:3000”,但是仍然无法正常工作。
答案 0 :(得分:0)
找到了基于此question的解决方案。
首先在react应用程序上的axios方法中,执行以下操作:
axios
.post(url, JSON.stringify(payload), {
withCredentials: true,
}).then(....)
您需要在请求标头中添加凭据true标头。在php文件中执行相同的操作。
在文件开头执行此操作,
header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");
之前,access-control-allow-origin设置为*。但是,为了为localhost:3000设置cookie,我们这样做。还包括allow-credentials,因为我们将axios请求发送为trueCredentials。
现在应该可以工作。