web-dev-qa-db-fra.com

Laravel 5.4 redirection vers une URL personnalisée après la connexion

J'utilise Laravel Framework 5.4.10 et j'utilise l'authentification régulière qui 

php artisan make:auth

fournit. Je souhaite protéger l'ensemble de l'application et rediriger les utilisateurs vers/thèmes après la connexion.

J'ai 4 contrôleurs: ForgotPasswordController.php, LoginController.php, RegisterController.php et ResetPasswordController.php. J'ai édité cette ligne dans les trois derniers:

protected $redirectTo = '/themes';

Ceci est la première ligne de mes routes/web.php:

Auth::routes();

J'ai ajouté cette fonction dans mon Controller.php:

    public function __construct()
    {
        $this->middleware('auth');

    }

J'ai édité app/Http/Middleware/RedirectIfAuthenticated.php, de sorte que la fonction de traitement ressemble à ceci:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect('/themes');
    }

    return $next($request);
}

Tout va bien, sauf que lorsque je clique sur le bouton de connexion, je suis redirigé vers "/" et non pas "/ thèmes". Si je n'ai pas besoin d'authentification dans les contrôleurs (pas de fonction __contruct dans le fichier Controller.php), je suis redirigé correctement lors de la connexion. Qu'est-ce que je fais mal? 

25
ivanacorovic

C'est ce que je travaille actuellement, quelle coïncidence.

Vous devez également ajouter les lignes suivantes dans votre LoginController

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;

class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/

use AuthenticatesUsers;


protected function authenticated(Request $request, $user)
{
if ( $user->isAdmin() ) {// do your margic here
    return redirect()->route('dashboard');
}

 return redirect('/home');
}
/**
 * Where to redirect users after login.
 *
 * @var string
 */
//protected $redirectTo = '/admin';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}
}
44
Babagana

Si vous examinez le trait AuthenticatesUsers, vous verrez que, dans la méthode sendLoginResponse, un appel a été passé à $this->redirectPath(). Si vous regardez cette méthode, vous découvrirez que le redirectTo peut être une méthode ou une variable.

C'est ce que j'ai maintenant dans mon contrôleur d'authentification.

public function redirectTo() {
    $user = Auth::user();
    switch(true) {
        case $user->isInstructor():
            return '/instructor';
        case $user->isAdmin():
        case $user->isSuperAdmin():
            return '/admin';
        default:
            return '/account';
    }
}
9
plexus

La façon dont je l'ai fait en utilisant le trait AuthenticatesUsers.

\App\Http\Controllers\Auth\LoginController.php

Ajoutez cette méthode à ce contrôleur:

/**
 * Check user's role and redirect user based on their role
 * @return 
 */
public function authenticated()
{
    if(auth()->user()->hasRole('admin'))
    {
        return redirect('/admin/dashboard');
    } 

    return redirect('/user/dashboard');
}
7
Amirul

Vous devez définir la valeur $ redirectTo sur la route à rediriger.

$this->redirectTo = route('dashboard');

dans le constructeur AuthController.

/**
 * Where to redirect users after login / registration.
 *
 * @var string
 */
protected $redirectTo = '/';

/**
 * Create a new authentication controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    $this->redirectTo = route('dashboard');
}
1
Farid Movsumov

vous pouvez ajouter une méthode dans LoginController ajouter la ligne use App\User; en haut, après cette méthode d’ajout, c’est un travail pour moi wkwkwkwkw, mais vous devez ajouter {{ csrf_field() }} à la vue admin et utilisateur

protected function authenticated(Request $request, $user){

$user=User::where('email',$request->input('email'))->pluck('jabatan');
$c=" ".$user." ";
$a=strcmp($c,' ["admin"] ');

if ($a==0) {
    return redirect('admin');

}else{
    return redirect('user');

}}
1

en accord avec Documentation Laravel , je crée dans app/Http/Controllers/Auth/LoginController.php la méthode suivante:

protected function redirectTo()
{
    $user=Auth::user();

    if($user->account_type == 1){
        return '/admin';
    }else{
        return '/home';
    }

}

pour obtenir les informations utilisateur de ma base de données, j’ai utilisé "Illuminate\Support\Facades\Auth;".

0
Giuseppe Muci