Laravel Auth :: check()在AppServiceProvider.php中始终返回false

时间:2019-06-29 13:50:33

标签: php laravel

我试图在每个页面中执行一个函数,并在AppServiceProvider.php的{​​{1}}中执行该操作,我依赖于boot()类,但是Auth总是返回{{1 }}

Auth::check()

4 个答案:

答案 0 :(得分:1)

Laravel Docs

  

服务提供商确实是引导Laravel应用程序的关键。创建了应用程序实例,注册了服务提供商,并将请求移交给了引导程序。真的就是这么简单!

     

一旦启动了应用程序并注册了所有服务提供商,则请求将被移交给路由器进行分派。路由器会将请求分派到路由或控制器,并运行任何特定于路由的中间件。

并且由于Auth和Session是使用中间件进行更新/初始化的,这意味着您无法从服务提供商处访问它。

您只能使用呈现视图时调用的回调将数据绑定到服务提供者中的视图(这意味着服务器已经在准备响应)

View::composer('is_authenticated', Auth::check());

答案 1 :(得分:0)

也许Auth未在AppServiceProvider之前加载。因为在Controller中,Auth :: check()可以正常工作。所以我认为在AppServiceProvider中使用Auth :: check()是一个非常糟糕的主意。 AppServiceProvider旨在注册和引导服务,也许在您的应用程序中有Auth :: check()更好的地方?

答案 2 :(得分:0)

您需要为此使用View Composer。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Auth;
use DB;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        view()->composer('*', function ($view) 
        {
            if (Auth::check()) {

            }   
        });  
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

答案 3 :(得分:0)

要仅为授权用户正确保护路由,应在路由上使用->middleware('auth')

https://laravel.com/docs/5.8/authentication

我也建议您更新问题,以包括您正在使用的Laravel版本。