Laravel 5.6 Auth::check() 如果使用 fetch 调用返回 false
Posted
技术标签:
【中文标题】Laravel 5.6 Auth::check() 如果使用 fetch 调用返回 false【英文标题】:Laravel 5.6 Auth::check() return false if called with fetch 【发布时间】:2018-11-12 10:52:53 【问题描述】:我想检查用户是否通过 javascript fetch()
函数登录。但是它总是返回false,但是如果我直接在地址栏中调用URL,它会返回true,因为它应该是。代码如下:
/routes/web.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);
);
我的方法有什么问题?
【问题讨论】:
看看这个问题:***.com/questions/34558264/fetch-api-with-cookie 【参考方案1】:我不知道你的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]);
);
【讨论】:
是的,抱歉打错了,return 语句存在于我的代码中,我只是在创建此线程时忘记输入。【参考方案2】:可能是因为您没有指定应包含凭据,Fetch Api 默认不使用 cookie。所以也许像这样它会起作用:
fetch('/check-login',
headers:
'Accept': 'application/json'
,
credentials: 'same-origin'
)
.then(response =>
return response.json();
)
.then(result =>
console.log(result);
);
【讨论】:
以上是关于Laravel 5.6 Auth::check() 如果使用 fetch 调用返回 false的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 Auth 登录有效,Auth::check 失败
Laravel 5 - 在视图中使用 Auth::check()