Bonjour,

Bonjour je travaille sur laravel 5.7 mais j'ai un soucis avec l'authentification suis parti de l'authentification de base de laravel ensuite jai crée un middleware admin, ajouter un role_id sur la table users mais lors de l'authification je suis toujours redirigé sur la homepage meme si l'utilisateur est un administrateur c'est assez étrange je vous mets mon fichier de routing ainsi que le constructeur du controlleur login

Ce que je fais

fichier de routing

Route::get('/', 'HomeController@index')->name('home');
Auth::routes();
Route::get('/confirm/{id}/{token}','Auth\RegisterController@confirm');
Route::group(['as'=>'admin.','prefix'=>'admin','namespace'=>'Admin','middleware'=>['auth','admin']], function (){
     Route::get('dashboard','DashboardController@index')->name('dashboard');
});

loginController

public function __construct()
    {
        if (Auth::check() && Auth::user()->role_id == 1) {
            $this->redirectTo = route('admin.dashboard');
        } else {
            $this->redirectTo = route('agent.dashboard');
        }
        $this->middleware('guest')->except('logout');
    }

Ce que je veux

Jessaye de rediriger l'utilisateur sur le dashboard s'il est admin ou sur la homepage s'il est juste membre

Ce que j'obtiens

jai aussi modifier le middleware RedirecIfAuthenticated pour ajouter cette logique mais rien n'y fait toujours redirigé vers la homePage ! De l'aide SVP

5 réponses


Bonjour.
Il est inutile de créer deux fois le même sujet.
Même si l'intitulé de son titre n'est pas exactement le même, si son contenu est le même, il est malgrès tout identique.
Je te recommande donc de supprimer immédiatement l'autre sujet.

Il faut aller modifier le fichier RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        /*if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }*/
        if (Auth::check() && Auth::user()->role_id == 1) {
            return redirect()->route('admin.dashboard');
        } else {
           return  redirect()->route('agent.dashboard');
        }

        return $next($request);
    }
}

Je vous conseil cette methode https://hdtuto.com/article/laravel-57-multiple-authentication-example

ndiayejp
Auteur

J'ai modifié le fichier redirectIfAuthenticated mais ça ne change pas grand chose

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check() && Auth::user()->role_id == 1) {
            return redirect('/admin/dashboard');
        }elseif(Auth::guard($guard)->check() && Auth::user()->role_id == 2){
            return redirect('/agent/dashboard');
        }else {
            return $next($request);
        } 

    }

@ndiayejp: Petite clarification, il est inutile de mettre le return $next($request); dans une condition, car pour commencer les conditions précédentes font déjà un return et c'est un code qui s'effectuera de toute manière si l'un des deux autres cas n'est pas rencontré.

Le mieux c'est de ne pas utiliser le systeme d'authentification de laravel mais ecrire ton propre systeme d'authentification la tu aura plus de controle sur la redirection