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 Auth::check() 失败

Laravel 5.2 Auth 登录有效,Auth::check 失败

Laravel 5 - 在视图中使用 Auth::check()

Laravel - 如何在不同域之间使用 Auth::check 或 Auth::user?

auth::check in laravel 5 不工作

在 Laravel 4 中重定向更改 Auth::check() 的状态