将自定义函数添加到Auth Class Laravel(扩展Guard类)

时间:2015-10-27 12:28:52

标签: php laravel laravel-5

我修改了位于

的Laravel供应商文件

/vendor/laravel/framework/src/Illuminate/Auth/Guard.php

但是在更新Laravel时会被覆盖。

我正在寻找一种方法将代码放在我的/ app中,以防止覆盖。

修改的功能是

public function UpdateSession() {
    $this->session->set('type', $type); //==> Set Client Type
}

此外,该文件还有一个新功能:

public function type() {
    return $this->session->get('type'); //==> Get Client Type
}

上面的代码在我的应用程序的许多地方被调用。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

步骤:
1-创建myGuard.php

class myGuard extends Guard
{
    public function login(Authenticatable $user, $remember = false)
    {
        $this->updateSession($user->getAuthIdentifier(), $user->type);
        if ($remember) {
            $this->createRememberTokenIfDoesntExist($user);
            $this->queueRecallerCookie($user);
        }
        $this->fireLoginEvent($user, $remember);
        $this->setUser($user);
    }

    protected function updateSession($id, $type = null)
    {
        $this->session->set($this->getName(), $id);
        $this->session->set('type', $type);
        $this->session->migrate(true);
    }

    public function type()
    {
        return $this->session->get('type');
    }
}

2- AppServiceProvider或新服务提供者或routes.php:

public function boot()
{
    Auth::extend(
        'customAuth',
        function ($app) {
            $model = $app['config']['auth.model'];
            $provider = new EloquentUserProvider($app['hash'],    $model);
            return new myGuard($provider, App::make('session.store'));
        }
    );
}

3 in config / auth.php

'driver' => 'customAuth',

4-现在你可以使用这个

Auth::type();

答案 1 :(得分:0)

看起来你根本不需要更新Guard。据我所知,您只是尝试从会话中检索数据。对于卫队来说,这绝对不是生意。

您可以通过多种方式自行访问会话:

// via Session-Facade
$type = Session::get('type');
Session::put('type', $type);

// via Laravels helper function
$type = session('type'); // get
session()->put('type', $type); // set
session(['type' => $type']); // alternative