Laravel 5.6 Auth::check() 如果使用 fetch 调用,则返回 false



我想检查用户是否通过JavaScriptfetch()函数登录。但它总是返回 false,但是如果我直接在地址栏中调用 URL,它会按预期返回 true。这是代码:

/路线/网络.php

Route::get('check-login', function () {
if (Auth::check()) {
return response()->json(['isLogin'=>'ok']);
} else  {
return response()->json(['isLogin'=>'no']);
}
});

JavaScript:

fetch('/check-login', {
headers:{
'Accept': 'application/json'
}
})
.then(response => {
return response.json();
})
.then(result => {
console.log(result);
});

我的方法有什么问题?

也许是因为您没有指定应包含凭据,Fetch API 默认情况下不使用 cookie。所以也许像这样它会起作用:

fetch('/check-login', {
headers:{
'Accept': 'application/json'
},
credentials: 'same-origin'
})
.then(response => {
return response.json();
})
.then(result => {
console.log(result);
});

我不知道你的javascript代码对错,但routes\web.php必须是

Route::get('check-login', function () {
if (Auth::check()) {
return response()->json(['isLogin'=>'ok']);
} else {
return response()->json(['isLogin'=>'no']);
}
});

此代码等效(更具可读性(

Route::get('check-login', function () {
if (Auth::check()) {
return response()->json(['isLogin'=>'ok']);
}
return response()->json(['isLogin'=>'no']);
});

或者你可以使用三元运算符

Route::get('check-login', function () {
$isLogin = Auth::check() ? 'ok' : 'no';
return response()->json(['isLogin'=> $isLogin]); 
});

最新更新