it-swarm.com.de

Middleware, wie man nach dem Check weiterleitet Laravel 5

Ich muss nachprüfen, ob der Benutzer als Editor angemeldet ist, um zur Profilseite weiterzuleiten ...

Hier ist mein Code:

<?php namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;

use Closure;

class AdminMiddleware {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check()){
                    if(Auth::user()->roles->toArray()[0]['role'] == 'editor'){
                       return redirect('/profile');
                    }
                    return $next($request);
                }
                else
                {

                   return $next($request);
                }
    }

}

Problem mit diesem Code ist, wenn Benutzer Editor ist, bekomme ich Endlosschleife ....

Hier ist mein Router:

Route::group(['middleware' => 'auth'], function(){

    Route::get('home', ['middleware' => 'admin', function()
        {
        return view('home');
        }]);
    Route::get('profile', array(
       'as' => 'profile',
       'uses' => '[email protected]'
    ));


});

Weiß jemand was ist das Problem?

9
Vladimir Djukic

Wo haben Sie Ihre Middleware in App\Http\Kernel registriert? 

Ist es in geschütztem $middleware = [] oder protected $routeMiddleware = []

Wenn es in $middleware registriert ist, wird es für jede einzelne Anforderung ausgeführt und führt zu einer Endlosschleife. Wenn dies der Fall ist, verwenden Sie nur $routeMiddleware.

5
Digitlimit

Ich habe festgestellt, dass dies weniger Code und weniger Entscheidungen für das Umleiten von Benutzern basierend auf Rollen ist. Fügen Sie dies in Ihre AuthController.php ein

protected function authenticated( $user)
{

    if($user->user_group == '0') {
        return redirect('/dashboard');
    }

    return redirect('my-account');
}

https://laracasts.com/discuss/channels/laravel/how-best-to-redirect-admins-from-users-after-login-authentication

1
Harry Bosh

Gehe zu Kernel.php. Es ist in app\http. Versuchen Sie, protected $routeMiddleware In diesem Array zu finden, das Sie hinzufügen müssen

'admin' => \App\Http\Middleware\AdminMiddleware::class

Danach sollte es gut funktionieren. Hoffe, das hilft jedem, der das gleiche Problem hat.

0
Koushik Das