如何扩展Laravel的Auth Guard课程?

时间:2013-12-20 10:19:08

标签: php authentication laravel extending

我试图通过一种额外的方法扩展Laravel的Auth Guard类,所以我最后可以调用Auth::myCustomMethod()

遵循文档部分Extending The Framework我坚持如何正确地执行此操作,因为Guard类本身没有我可以覆盖的自己的IoC binding

以下是一些代码,展示了我正在尝试做的事情:

namespace Foobar\Extensions\Auth;

class Guard extends \Illuminate\Auth\Guard {

    public function myCustomMethod()
    {
        // ...
    }

}

现在我应该如何注册要使用的扩展课程Foobar\Extensions\Auth\Guard而不是原来的Illuminate\Auth\Guard,这样我才能以与{1}}相同的方式调用Auth::myCustomMethod()Auth::check()

一种方法是替换Auth中的app/config/app.php别名,但我不确定这是否真的是解决此问题的最佳方法。

BTW:我正在使用Laravel 4.1。

2 个答案:

答案 0 :(得分:8)

我会创建自己的UserProvider服务,其中包含我想要的方法,然后扩展Auth。

我建议您创建自己的服务提供商,或直接在其中一个启动文件中扩展Auth类(例如。start/global.php)。

Auth::extend('nonDescriptAuth', function()
{
    return new Guard(
        new NonDescriptUserProvider(),
        App::make('session.store')
    );
});

这是一个很好的tutorial you can follow to get a better understanding

您可以使用另一种方法。它将涉及扩展当前的一个提供者,如Eloquent。

class MyProvider extends Illuminate\Auth\EloquentUserProvider {

    public function myCustomMethod()
    {
        // Does something 'Authy'
    }
}

然后您可以像上面一样扩展身份验证,但使用自定义提供程序。

\Auth::extend('nonDescriptAuth', function()
{
    return new \Illuminate\Auth\Guard(
        new MyProvider(
            new \Illuminate\Hashing\BcryptHasher,
            \Config::get('auth.model')
        ),
        \App::make('session.store')
    );
});

一旦实现了代码,您就会将auth.php配置文件中的驱动程序更改为使用'nonDescriptAuth`。

答案 1 :(得分:-7)

添加(并替换现有功能)的唯一方法是在项目中创建 Guard.php 文件的副本,并在 app / start / global.php 中添加:

require app_path().'/models/Guard.php';

当然这是一个丑陋的方法,但我花了一个多小时来测试所有可能性[如何通过Auth更改存储在Session中的内容]并且它总是以错误结束: ...类HSGuard的构造要求第一个参数是' UserProviderInterface'并获得EloquentUserProvider' ...