【问题标题】:Laravel 5.6 Auth::check() return false if called with fetchLaravel 5.6 Auth::check() 如果使用 fetch 调用返回 false
【发布时间】: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);
            });

我的方法有什么问题?

【问题讨论】:

标签: javascript php laravel authentication fetch


【解决方案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);
        });

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2015-03-03
    • 2018-09-08
    • 1970-01-01
    • 2015-12-14
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多