Laravel 5.3:如何在服务提供商中使用Auth?

问题描述:

我通过从表中获取值来在共享视图中传递一个值。我需要知道用户ID,但Auth::check()返回false。我该怎么做?以下是代码:Laravel 5.3:如何在服务提供商中使用Auth?

public function boot() 
    { 
     $basket_count = 0; 
     if (Auth::check()) { //always false 
      $loggedin_user_id = Auth::user()->id; 
      $basket_count = Cart::getBasketCount(); 
     } 
     view()->share('basket_count', $basket_count); 
    } 
+0

我想你需要使用Laravel的'Event Listener'。 https://laravel.com/docs/5.3/events –

+0

尝试像这样'使用Illuminate \ Support \ Facades \ Auth;' '公共功能引导($ guard = null)' '$ auth = Auth :: guard ($ guard);' '$ auth-> guest()true或false' '$ auth-> user()' – Froxz

+0

@Froxz'guest'为true – Volatil3

OK结果显示ServiceProviders不适用于这种情况。最好的是Middleware。因此,如果您想调用Auth,请创建中间件并将值传递给视图。

public function handle($request, Closure $next) 
    {    
     $basket_count = 0; 
     if ($this->auth) { //always false 
      $loggedin_user_id = $this->auth->user()->id; 
      $basket_count = Cart::getBasketCount($loggedin_user_id); 
     } 
     view()->share('basket_count', $basket_count); 

     return $next($request); 
    } 

您可以直接在控制器文件中使用身份验证。将它添加到中间件中是进行身份验证的一种更简洁的方式。

例如,在CategoriesController.php

...

类CategoryController扩展控制器{

/** 
* CategoryController constructor. 
*/ 
public function __construct() 
{ 
    $this->middleware('auth'); 
} 

...

如果你想看看一个完整的例子 http://deepdivetuts.com/basic-create-edit-update-delete-functionality-laravel-5-3