Hallo,
ich möchte meine Laravel-Anwendung nur Personen zugänglich machen, die eingelogged sind, d.h. alle Requests sollen mit dem Session-Guard überprüft werden. Hat sich der Nutzer nicht angemeldet, wird er zunächst nach /login weitergeleitet. Dort soll er sich dann gegen eine externe Datenquelle authentifizieren. Anlegen oder Verändern von Nutzern soll ebensowenig möglich sein, wie Passwort zusenden oder zurücksetzen.
Hier ist die /config/auth.php:
Ich lade diesen UserProvider über die boot-Funktion im LdapAuthServiceProvider (welchen ich in /config/app.php bei providers eingetragen habe):
Der LdapUserProvider sieht dann testweise erstmal so aus:
Und hier der LdapUser:
Routen habe ich auch in routes/web.php. Unter anderem:
/helloworld sollte also zunächst auf /login umleiten. Tut es auch. Der POST-Aufruf sollte dann vom LdapLoginController übernommen werden:
Soweit, so gut. Irgendwie muss der Controller aber nun doch ein LdapUser-Objekt erzeugen und die Session aufmachen. Da stehe ich gerade auf dem Schlauch. Kann mir jemand einen Tipp geben? Freue mich über jeden Hinweis!
ich möchte meine Laravel-Anwendung nur Personen zugänglich machen, die eingelogged sind, d.h. alle Requests sollen mit dem Session-Guard überprüft werden. Hat sich der Nutzer nicht angemeldet, wird er zunächst nach /login weitergeleitet. Dort soll er sich dann gegen eine externe Datenquelle authentifizieren. Anlegen oder Verändern von Nutzern soll ebensowenig möglich sein, wie Passwort zusenden oder zurücksetzen.
Hier ist die /config/auth.php:
PHP-Code:
<?php
return [
'defaults' => [ 'guard' => 'web', 'passwords' => '', ],
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ],
'providers' => [ 'users' => [ 'driver' => 'ldap', 'model' => App\LdapUser::class, ], ],
'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ],
];
PHP-Code:
<?php
namespace App\Providers;
use App\Providers\LdapUserProvider;
use Illuminate\Support\ServiceProvider;
class LdapAuthServiceProvider extends ServiceProvider {
public function boot()
{
$this->app['auth']->provider('ldap',function() { return new LdapUserProvider(); });
}
public function register() { }
}
?>
PHP-Code:
<?php
namespace App\Providers;
use App\LdapUser;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
class LdapUserProvider implements UserProvider {
// Testweise immer ok:
public function validateCredentials(Authenticatable $user, array $credentials) { return true; }
public function retrieveById($id) { return $this->dummyUser(); }
public function retrieveByCredentials(array $credentials) { return $this->dummyUser(); }
public function retrieveByToken($identifier, $token) { return new \Exception('not implemented'); }
public function updateRememberToken(Authenticatable $user, $token) { return new \Exception('not implemented'); }
// Hilfsfunktion zu Testzwecken
protected function dummyUser() {
$attributes = array(
'id' => 123,
'username' => 'chuckles',
'password' => \Hash::make('SuperSecret'),
'name' => 'Dummy User',
);
return new LdapUser($attributes);
}
}
PHP-Code:
<?php
namespace App;
use Illuminate\Auth\GenericUser;
class LdapUser extends GenericUser {
}
PHP-Code:
<?php
Route::group(['middleware' => 'auth'], function () {
Route::get('/helloworld', function () {return 'Hello World!';});
});
Route::get('/login', 'LdapLoginController@showLoginForm');
Route::post('/login', 'LdapLoginController@login');
Route::get('/logout', 'LdapLoginController@logout');
PHP-Code:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LdapLoginController extends Controller {
// Trait nutzen und einzelne Funktionen unten überschreiben.
use AuthenticatesUsers;
}
Kommentar