Laravel 5包开发- Auth::attempt()导致AppUser找不到


Laravel 5 package development - Auth::attempt() leads to AppUser not found

我正在开发一个包装一些Laravel用户逻辑的包,因为我想在保留原生实现的同时添加一些功能。

这是我的包的composer.json

{
    "name": "foo/bar",
    "description": "A Laravel 5 package",
    "authors": [
        {
            "name": "",
            "email": ""
        }
    ],
    "require": {
        "php": ">=5.4.0",
        "illuminate/auth": "5.1.*"
    },
    "require-dev": {
        "orchestra/testbench": "~3.0"
    },
    "autoload": {
        "psr-4": {
            "Foo''": "src/Foo/"
        }
    },
    "minimum-stability": "stable"
}
这是一个示例代码:
class Foo {
    function login($username, $password) { 
        'Auth::attempt($username, $password);
    }
}

这是一个示例测试用例

class UserServiceTest extends 'Orchestra'Testbench'TestCase {
    function testLogin() {
        $foo = new Foo();
        $foo->login('foo', 'bar');
    }
}

现在,当运行测试时,我得到这个PHP Fatal error: Class ''App'User' not found in path/to/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php on line 126

我可以理解为什么(应用程序'用户生活在laravel/laravel包),但我无法理解如何正确声明我的包依赖关系。

我应该怎么做才能重用整个Auth和User laravel原生实现?

为了重用laravel的认证,你不需要使用laravel/laravel包。

只要导入illuminate/auth包就足够了。这将为您提供验证用户所需的3个条件中的2个:

  • Guard类(通常通过Auth facade访问),提供认证方法(尝试,检查等)
  • 根据用户的凭据获取用户的用户提供程序——这个包同时提供Eloquent和Database用户提供程序

你最不需要的就是一个User类,或者任何实现 authenticatableccontract 的Model。

Guard接受user provider作为其构造函数的参数之一,user provider接受要使用的模型的类作为其构造函数的参数之一。

这3个元素足以使用Laravel的身份验证。