Laravel 5.5,Auth :: user()无法在Controller.php

时间:2018-03-24 18:47:24

标签: php laravel

我关注视频Multiple Authentication in Laravel 5.4 Natively! (Admins + Users) - Part 1
从第1部分到第5部分,一切都完成了。现在我可以登录,退出。
当我想获得管理员的属性时买,我遇到了问题。

在管理员刀片中,我可以使用{{Auth :: user() - > name}},没关系。
在Composer中,它也没关系。

<?php

namespace App\Http\ViewComposers;
use Illuminate\View\View;
use Illuminate\Http\Request;
use Auth;

class AdminComposer
{
  /**
   * Create a movie composer.
   *
   * @return void
   */
  public function __construct(Request $request)
  {
    $this->admin= Auth::user();
    $this->base = config('app.url') . '/admin/';

  }

  /**
   * Bind data to the view.
   *
   * @param  View  $view
   * @return void
   */
  public function compose(View $view)
  {
    $view->with('admin', $this->admin);
    $view->with('base', $this->base);
  }
}

然后我尝试在Controller中使用View,没有任何内容,也没有错误消息。

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Auth;

class Controller extends BaseController
{
  use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

  public function __construct()
  {
    $admin = Auth::user();
    echo "<pre>", print_r($admin, 1), "</pre>"; exit;
    if(!empty($admin)){
      View::share('admin', $admin);
    }
  }
}

为什么Auth :: user()在刀片和编写器中没问题,而不在控制器中工作?

/config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

也许我找到了原因。虽然还没有解决。

在laravel的Controller.php中,它不起作用。 但是在我创建的任何其他控制器中,没关系

例如,以下是可以的 App \ Http \ Controllers \ Admin \ HomeController.php

public function __construct()
{
  $this->middleware('auth:admin');
  parent::__construct();
}

public function index()
{
  $admin = Auth::user();
  dd(Auth::user());
}

也许这是因为中间件。

在其他post中,有人使用Auth :: guard('mrm') - &gt; User()
但我这样做,我尝试了Auth :: guard('admin') - &gt; User()
仍然没有...

2 个答案:

答案 0 :(得分:1)

从Laravel 5.3开始,您无法再访问控制器构造函数中的会话because middleware has not run yet。对用户进行身份验证或获取经过身份验证的用户需要会话中间件已经运行。

You can define a closure(滚动到&#34;构造函数中的会话&#34;)会话中间件运行后发生。

答案 1 :(得分:1)

我通常使用Illuminate\Support\Facades\Auth作为pull in命名空间。试试吧。