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

时间:2018-06-02 14:34:08

标签: javascript php laravel authentication 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);
            });

我的方法有什么问题?

2 个答案:

答案 0 :(得分:2)

也许是因为您没有指定应包含凭据,Fetch Api默认情况下不使用Cookie。所以也许这样可行:

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

答案 1 :(得分:1)

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

 textView.setText(uri.toString());

此代码等效(更易读)

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']);

});