即时更改Auth的模型

时间:2015-08-07 14:25:08

标签: laravel laravel-5

我使用了config::set('auth.model','App\Fblogin')并获取了config::get('auth.model');它似乎更新了价值,但是当我尝试Auth::logInUsingId()时,它似乎还在使用默认{{} 1}}。那么我该怎么做才能使用我的控制器上的App\User

2 个答案:

答案 0 :(得分:6)

如果您使用的是Laravel 5.1.11或更高版本,请使用:

auth()->getProvider()->setModel(App\Fblogin::class);

如果你不能/不会升级,恐怕没有简单的方法可以达到这个目的。

通过EloquentUserProvider解决模型。使用的模型类在构造函数中设置,在运行时无法更改,因为属性为protected

你可以扩展EloquentUserProvider,也可以作弊并设置它:

function set_auth_model($model) {
    $closure = (function ($model) { $this->model = $model; });

    $closure = $closure->bindTo(Auth::getProvider());

    $closure($model);
}

set_auth_model(App\Fblogin::class);

但真的......只是升级。

答案 1 :(得分:1)

这可能是可能的,但您必须尝试这一点。您可以设置自己的Auth驱动程序,它只是扩展了默认的laravel auth驱动程序,但稍微修改了一下。例如,您可以通过提供商执行此操作。在提供商的启动方法中,您要说:

false

请注意,我们不再通过构造函数传递模型。我们将以不同的方式处理。您的MyUserProvider类扩展了EloquentUserProvider。我们将createModel方法覆盖到我们自己的版本,而不是使用构造的模型名称,而是在运行时获取模型名称。

    $this->app['auth']->extend('my-auth', function ($app) {
        return new Guard(
            new MyUserProvider($app['hash']),
            $app->make('session.store')
        );
    });

我还没有尝试过看看它是否有效,但你可以使用这种方法让它工作。