Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel 5 Basics (Zwölf) – Zertifizierung

Laravel 5 Basics (Zwölf) – Zertifizierung

WBOY
WBOYOriginal
2016-08-08 09:26:36846Durchsuche

Laravel verfügt bereits über ein Benutzerauthentifizierungssystem. Werfen wir einen Blick auf routes.php. Falls gelöscht, fügen Sie hinzu:

<code>Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController'
]);</code>

Sie können php artisan route:list verwenden, um es auszuprobieren. Besuchen Sie /auth/login im Browser und Sie sehen die Anmeldeoberfläche. Am besten kommentieren Sie die Dinge zu Google in der Systemvoreinstellung aus app.blade.php, sonst werden Sie verrückt.

Sie können sich registrieren, anmelden oder sogar das Passwort vergessen.

Die eigentliche Registrierung eines Benutzers ist nach der Übermittlung fehlgeschlagen, aber larave ist automatisch zu /home gesprungen. Mit tinker können Sie sehen, ob der Benutzer erstellt wurde.

verwendet tatsächlich AuthAuthController innerhalb von trait. Was ist ein Triat? Nun, PHP unterstützt nur die Einzelvererbung und Merkmale wurden in PHP5.4 hinzugefügt. Ein Merkmal ist eigentlich eine Kapselung einer Reihe von Methoden, und Sie können es in eine andere Klasse einbinden. Wie bei einer abstrakten Klasse können Sie sie nicht direkt instanziieren.

Es gibt einen Verweis auf ein Merkmal in AuthAuthController:

<code>use AuthenticatesAndRegistersUsers;</code>

Lass uns ihn finden und sehen, wie er nach der Registrierung springt. Er verbirgt es ziemlich tief, in vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndregistersUsers.php, wow.

<code>	public function redirectPath()
	{
		if (property_exists($this, 'redirectPath'))
		{
			return $this->redirectPath;
		}
        
        //如果用户设置了 redirectTo 属性,则跳转到用户设置的属性,否则到home
		return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
	}
</code>

OK, wir haben es verstanden. Legen Sie einfach das Attribut redirectTo fest, um den Sprung nach der Registrierung anzupassen. Wir haben in AuthAuthContotroller geändert:

<code> protected $redirectTo = 'articles';</code>

Lassen Sie uns zuerst /auth/logout verwenden, um sicherzustellen, dass wir den Vorgang beenden. Haben Sie keine Angst, wenn etwas schief geht, wir haben keine Standard-Startseite. Besuchen Sie uns noch einmal: auth/register Erstellen Sie einen neuen Benutzer, dieses Mal sollte es in Ordnung sein .

Melden Sie sich erneut ab und melden Sie sich dann mit der Anmeldung an.

Jetzt können wir die vorübergehend eingestellten ausgeblendeten Felder in form_partial löschen und den Controller ändern:

<code>    public function store(Requests\ArticleRequest $request) {
        //你可以这样
        //$request = $request->all();
        //$request['user_id'] = Auth::id();

        //更简单的方法
        $article = Article::create($request->all());
        //laravel 自动完成外键关联
        Auth::user()->articles()->save($article);

        return redirect('articles');
    }</code>

Fügen Sie einen Artikel hinzu und verwenden Sie tinker, um ihn anzusehen.

Middleware

Natürlich möchten wir nicht, dass jemand Artikel veröffentlichen kann, zumindest nicht, wenn er sich einloggt. Wir fügen Schutz im Controller hinzu:

<code>    public function create() {
        if (Auth::guest()) {
            return redirect('articles');
        }
        return view('articles.create');
    }</code>

Der obige Code kann funktionieren, aber es gibt ein Problem, das wir in jeder Methode durchführen müssen, die geschützt werden muss. Das ist zu dumm.

Middleware kann als Verarbeitungspipeline verstanden werden. Die Middleware verarbeitet zu einem bestimmten Zeitpunkt in der Pipeline. Dieser Moment kann eine Anfrage oder eine Antwort sein. Abhängig von den Verarbeitungsregeln der Middleware kann die Anfrage umgeleitet oder weitergeleitet werden.

enthält drei Middlewares in app/http/middleware. Sie können anhand ihrer Namen erkennen, dass Closure $next die nächste Middleware darstellt.

Registrieren Sie die Middleware in app/http/kernel.php. Der Abschnitt $middleware deklariert Middleware, die das gesamte HTTP verarbeitet, $routeMiddleware verarbeitet nur Routing, und Sie müssen die Verwendung einer oder mehrerer dieser Middlewares explizit deklarieren.

Angenommen, wir möchten das gesamte ArticlesController schützen, fügen wir Middleware direkt im Konstruktor hinzu:

<code>    public function __construct() {
        $this->middleware('auth');
    }</code>

Jede Methode ist jetzt geschützt.

Aber wir möchten wahrscheinlich nicht, dass der gesamte Controller geschützt ist. Was ist, wenn es nur eine oder zwei seiner Methoden sind? Wir können so damit umgehen:

<code>    public function __construct() {
        $this->middleware('auth', ['only' => 'create']);
        //当然可以反过来
        //$this->middleware('auth', ['except' => 'index']);
    }</code>

Wir müssen keine Middleware im Konstruktor des Controllers einführen, wir können sie direkt in der Route deklarieren:

<code>Route::get('about', ['middleware' => 'auth', 'uses' => 'PagesController@about']);</code>

Die in kernel.php bereitgestellte System-Middleware, wie z. B. 'IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode', ermöglicht es uns, in den Wartungsmodus zu wechseln. Das System ist beispielsweise online, muss jetzt aber für die Verarbeitung vorübergehend heruntergefahren werden. Wir können es auf der Befehlszeile verarbeiten. Sehen Sie sich diese Middleware in Aktion an:

<code>php artisan down</code>

Besuchen Sie die Website und Sie können sehen, dass jede URL-Anfrage sofort zurückgegeben wird. Website online:

<code>php artisan up</code>

Lassen Sie uns unsere eigene Middleware erstellen:

<code> php artisan make:middleware Demo</code>

Dann fügen Sie den Code hinzu:

<code>	public function handle($request, Closure $next)
	{
        //如果请求中含有 foo,我们就回到控制器首页
        if ($request->has('foo')) {
            return redirect('articles');
        }

		return $next($request);
	}</code>

Wenn Sie Middleware für alle Anfragen verwenden möchten, müssen Sie diese in kernel.php in $middleware registrieren:

<code>	protected $middleware = [
		...
		'App\Http\Middleware\Demo',

	];</code>

Jetzt können wir das testen. Nehmen wir an, wir besuchen /articles/create?foo=bar und werden zur Startseite weitergeleitet.

Lassen Sie uns diese Anzeige-Middleware loswerden und eine Middleware erstellen, die tatsächlich nützlich ist. Angenommen, wir möchten eine Seite schützen. Diese Seite muss für Administratoren zugänglich sein.

<code>php artisan make:middleware RedirectIfNotAManager</code>

Fügen wir den Verarbeitungscode hinzu:

<code>	public function handle($request, Closure $next)
	{
        if (!$request->user() || !$request->user()->isATeamManager()) {
            return redirect('articles');
        }

		return $next($request);
	}</code>

Ändern wir unser Modell:

<code>    public function isATeamManager() {
        return false;
    }</code>

Der Einfachheit halber geben wir false direkt zurück. Dieses Mal platzieren wir die Middleware in kernel.php in $routeMiddleware .

<code>	protected $routeMiddleware = [
		...
		'manager' => 'App\Http\Middleware\RedirectIfNotAManager',
	];</code>

Lassen Sie uns eine Testroute erstellen, um es zu testen:

<code>Route::get('foo', ['middleware' => 'manager', function() {
    return 'This page may only be viewed by manager';
}]);</code>

Der Gastidentitätszugriff oder der Login-Identitätszugriff kehren zur Startseite zurück. Wenn Sie jedoch isATeamManager() so ändern, dass true zurückgegeben wird, kann der Login-Identitätszugriff die zurückgegebenen Informationen sehen.

Das Obige hat die Grundlagen der Laravel 5 (Twelve)-Zertifizierung vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn