簡體   English   中英

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

[英]Laravel 5.6 Auth::check() return false if called with fetch

我想檢查用戶是否通過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);
            });

我的方法有什么問題?

也許是因為您沒有指定應該包含憑據,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]); 
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM