【问题标题】:Auth::check always return nullAuth::check 总是返回 null
【发布时间】:2020-01-22 17:41:29
【问题描述】:

我试图在用户登录时显示一个按钮。如果用户没有登录,该按钮将不会出现在页面上。所以我需要做的第一件事是确定用户是否登录。问题是,Auth::check() 一直返回 null。我已经研究过我们应该将路由放在 Auth 中间件中,但是这样做,用户必须登录才能看到页面,我不希望这样。我希望用户无需登录也能看到该页面,当他们登录时,同一页面上会出现一个按钮。

组件

 <button v-if="showBtnDelete==true" class="btn btn-danger">Delete</button>

 <script>
      getUserType(){
            axios.get('api/gallery/getUserType').then(res=>{
            this.showBtnDelete = res.data;});
        },
 </script>

控制器

public function getUserType()
{
    if(Auth::check()){
        return 'true';
    }else{
        return 'false';
    }
}

Web.php

Route::group(['middleware' => ['auth']],function(){
Route::get('/add-image', function () {return view('layouts.master');});
});

Auth::routes();

Route::get('/logout','Auth\LoginController@logout');

Route::get('/', function () {
return view('home');
});

Route::get('{path?}', function () {
return view('layouts.master');
})->where('path', '[\/\w\.-]*');

【问题讨论】:

  • 你试过Auth::guard('api')-&gt;check()吗?只需将 api 替换为您要检查的守卫(我使用了那个,因为您正在从 axios 进行 ajax 调用)
  • 在返回前尝试“dd()”,让我们知道它的含义

标签: php laravel vue.js routes


【解决方案1】:

保护 API 或网络


Auth::guard('api')->check();


Auth::guard('web')->check()

【讨论】:

  • 两者都返回 false。
【解决方案2】:

您将 'true''false' 作为字符串返回,当非严格比较时它们都返回 true,而在严格比较时返回 false

echo 'false' == true; // true
echo 'false' === true; // false (not same data type)

反之亦然... 现在Auth::check() 自然会返回一个布尔值,因此 if、else 语句是多余的......
您可以在需要时使用 helper 方法来使用每个守卫

public function getUserType()
{
   return auth()->check();
}

【讨论】:

  • 我做了上面n检查了dd,即使我登录了它也会返回false
  • 您是否在您的 axios 请求中发送 API 令牌?如果您根本不使用令牌,则可以将该路由 gallery/getUserType 移动到 web.php
【解决方案3】:

如果有人有同样的问题。问题是您的路由不受中间件组 web 的保护。 这意味着它将无法检索当前用户的会话,因此 Auth 外观将始终返回 null。 将 middleware('web') 添加到访问方法(代码)的路由中,如果已登录,您将能够检索当前用户。

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2019-08-15
    • 2015-03-03
    • 2018-01-07
    • 2014-02-25
    • 2017-11-27
    相关资源
    最近更新 更多