Laravel:依赖注入身份验证

Posted

技术标签:

【中文标题】Laravel:依赖注入身份验证【英文标题】:Laravel: Dependency Inject Auth 【发布时间】:2015-01-01 19:07:25 【问题描述】:

如何在 Laravel 中依赖注入 Auth?

像这样:

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

    

如果我这样做,那么这不起作用:

$user_type = Auth::user()->user_type;

【问题讨论】:

【参考方案1】:

你应该输入提示Illuminate\Auth\AuthManager:

public function __construct(Illuminate\Auth\AuthManager $auth)

  $this->auth = $auth;

【讨论】:

这不起作用。当我运行测试时... $user_type = $this->auth->user()->user_type; ...失败 您有用户会话吗?因为尝试在没有用户会话的情况下获取$this->auth->user()->user_type,肯定会抛出Trying to get property of non-object 异常。 嗨,抱歉!我正在尝试对控制器进行单元测试,并且上面的代码导致错误。最初我只是为 Auth 使用了外观模式,但这导致了同样的问题。 在这种情况下,您应该模拟 AuthManager 进行测试。看看这个answer。 啊哈,这就是我一直在寻找的。​​span> 【参考方案2】:

如果要注入Auth,其实需要注入这个类:

use Illuminate\Contracts\Auth\Guard;

这将解决您在内部定义的所有内容:

config/auth.php

如果您想扩展 Auth,您可以这样做,但仅限于:

    Guard Driver 是 Guard 类 - 它需要实现 Guard 或 StatefulGuard 接口。

    Provider 是 UserProvider 类 - 它需要实现 UserProvider 接口。

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

    SessionGuard TokenGuard

标准的 Auth UserProviders 在 Laravel / Lumen 中是:

    EloquentUserProvider 数据库用户提供者

更多关于在 Laravel 官方文档中扩展 Auth 的信息。见以下链接:

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

这是我在我的控制器中的代码,它的工作就像一个魅力:

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

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

希望这会有所帮助!

干杯。

【讨论】:

以上是关于Laravel:依赖注入身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 WCF 中使用 Unity 将依赖项注入到属性中

Laravel Passport身份验证问题:始终返回未经身份验证的身份

Laravel Passport 没有身份验证

Laravel - 不能再使用基本身份验证

使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向

Laravel 5.1 使用默认身份验证控制器和中间件尝试使用额外参数进行身份验证