Laravel:依赖注入Auth

7

我该如何在 Laravel 中进行依赖注入 Auth?

可以这样:

 public function __construct(Auth $auth)
    {
      $this->auth = $auth;

    }

如果我这样做,那么这个就不能工作:
$user_type = Auth::user()->user_type;
2个回答

12

你应该对Illuminate\Auth\AuthManager进行类型提示:

public function __construct(Illuminate\Auth\AuthManager $auth)
{
  $this->auth = $auth;
}

这个不起作用。当我运行测试时... $user_type = $this->auth->user()->user_type; ...失败了。 - James Satori-Brunet
你是否有用户会话存在?因为在没有用户会话的情况下尝试获取 $this->auth->user()->user_type,一定会抛出 Trying to get property of non-object 异常。 - Bogdan
抱歉!我正在尝试对控制器进行单元测试,但上面的代码导致了错误。最初我只是使用了Auth的Facade模式,但这也导致了相同的问题。 - James Satori-Brunet
在这种情况下,您应该为测试模拟 AuthManager。请查看此答案 - Bogdan
啊哈,这就是我一直在寻找的。 - Miguel Stevens

6

如果您想注入Auth,实际上需要注入这个类:

use Illuminate\Contracts\Auth\Guard;

这将解决你在其中定义的所有内容:

config/auth.php

如果您想扩展Auth,只能为以下内容之一进行操作:
  1. Guard Driver,即Guard Class - 它需要实现Guard或StatefulGuard接口。

  2. 提供程序,即UserProvider Class - 它需要实现UserProvider接口。

Laravel / Lumen中的标准Auth Guard驱动程序包括:

  1. SessionGuard
  2. TokenGuard

Laravel / Lumen中的标准Auth UserProviders包括:

  1. EloquentUserProvider
  2. DatabaseUserProvider

有关扩展Auth的更多信息,请参阅官方Laravel文档。请参见下面的链接:

https://laravel.com/docs/5.0/extending#authentication

这是我在控制器中的代码,它运行得非常好:

    public function createToken(Request $request, Guard $guard)
    {
//        return 'in progress...';
    }

在ServiceProvider的boot()方法中扩展Auth类是最佳实践。

希望这能帮到你!

祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接