2015-10-27 27 views
5

ich einen Anbieter Datei von Laravel geändert hatteAdd Custom Funktion Auth Klasse Laravel (Verlängert Schutz Klasse)

platziert

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

, wird aber beim Aktualisieren von Laravel überschrieben.

Ich bin auf der Suche nach einer Möglichkeit, den Code irgendwo in meine/App zu setzen, um das Überschreiben zu verhindern.

Die modifizierte Funktion ist

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

Auch eine neue Funktion auf die Datei gibt es:

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

oben Codes sind an vielen Orten in meiner Anwendung genannt.

Irgendeine Idee?

+0

verwenden Wenn Sie eine Methode außer Kraft setzen möchten Sie eine Klasse erstellen sollte, der die Wache Klasse und * dann * außer Kraft setzen, das Verfahren und die Verwendung erstreckt, Klasse in Ihrer App. Sie sollten sich nicht direkt mit Laravel-Quellcode anlegen. –

Antwort

6

Schritte:
1- myGuard.php erstellen

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- in AppServiceProvider oder neuen Dienstleister oder 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- jetzt können Sie diesen

Auth::type(); 
+0

Wie sollte MyGuard von enthalten sein? Ich habe es einen "Extensions" -Ordner. Aber mit "/ App \ Extensions \ MyGuard verwenden;" in AppServiceProvider wird nicht gefunden. In der MyGuard-Datei habe ich "Illuminate \ Auth \ SessionGuard; Illuminate \ Contracts \ Auth \ Guard;" aber ich bin mir auch nicht sicher. – Olivvv

0

Dies sieht nicht so aus, als müssten Sie den Guard überhaupt aktualisieren. Soweit ich sehen kann, versuchen Sie nur, Daten aus der Sitzung abzurufen. Und das ist definitiv kein Geschäft für die Wache selbst.

Sie haben mehrere Möglichkeiten, den Zugriff auf die Sitzung selbst:

// 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