好吧,所以我遇到了一个相当奇怪的问题。
我正在为用户创建登录实例。
当我发布没有fetch()
的登录表单时,它可以正常工作。我的浏览器(包括Firefox和Chrome)正确设置了cookie,我可以进行“身份验证”。
但是,当我通过fetch()
发送数据时,后端不会setcookie()
。
注意:假设凭据正确无误。
这是我的PHP登录脚本
$user = htmlentities($_POST['username'], ENT_QUOTES);
$pass = htmlentities($_POST['password'], ENT_QUOTES);
$remember = isset($_POST['rememberme']) ? true : false;
$login = $PHPAuth['auth']->login($user, $pass, $remember);
/**
* $PHPAuth == [
* 'config' => PHPAuthConfig(),
* 'auth' => PHPAuth()
*/
if($login['error']) {
echo json_encode($login);
} else {
// create new cookie
setcookie(
$PHPAuth['config']->cookie_name,
$login['hash'],
$login['expire'],
'/', # path
'localhost', # domain
false, # HTTPS
true # HTTP-ONLY
);
echo json_encode($login);
}
fetch()
脚本是最低限度的,仅请求body
和method
。我删除了任何额外的标题,看看它是否会有所帮助。它没有:
function postForm(url, data) {
return fetch(url, {
body: data,
method: 'post'
})
.then(response => response.json());
}
供参考:我正在使用这个PHPAuth库。
答案 0 :(得分:1)
默认情况下,fetch没有启用Cookie,您可以添加credentials
选项并将其设置为same-origin
来执行此操作:
function postForm(url, data) {
return fetch(url, {
credentials: "same-origin",
body: data,
method: 'post'
})
.then(response => response.json());
}
详细了解Request.credentials
at MDN。