it-swarm.com.de

Laravel 5.4-Umleitung zur benutzerdefinierten URL nach dem Anmelden

Ich verwende Laravel Framework 5.4.10 und verwende die reguläre Authentifizierung 

php artisan make:auth

bietet. Ich möchte die gesamte App schützen und Benutzer nach dem Anmelden zu/themes umleiten.

Ich habe 4 Controller: ForgotPasswordController.php, LoginController.php, RegisterController.php und ResetPasswordController.php. Ich habe diese Zeile in den letzten drei Zeilen bearbeitet:

protected $redirectTo = '/themes';

Dies ist die erste Zeile in meinen Routen/web.php:

Auth::routes();

Ich habe diese Funktion in meine Controller.php eingefügt:

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

    }

Ich habe app/Http/Middleware/RedirectIfAuthenticated.php so bearbeitet, dass die Handle-Funktion wie folgt aussieht:

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

    return $next($request);
}

Es ist alles in Ordnung, außer wenn ich auf die Login-Schaltfläche klicke, werde ich zu "/" und nicht zu "/ themes" weitergeleitet. Wenn ich keine Authentifizierung in den Controllern benötige (keine __contruct-Funktion in der Datei Controller.php), werde ich bei der Anmeldung OK umgeleitet. Was mache ich falsch? 

25
ivanacorovic

Das ist es, was ich gerade arbeite, was für ein Zufall.

Sie müssen außerdem die folgenden Zeilen in Ihren LoginController einfügen.

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

Wenn Sie in der Eigenschaft AuthenticatesUsers nachsehen, sehen Sie in der sendLoginResponse-Methode, dass ein Aufruf an $this->redirectPath() erfolgt. Wenn Sie sich diese Methode anschauen, werden Sie feststellen, dass redirectTo entweder eine Methode oder eine Variable sein kann.

Dies ist, was ich jetzt in meinem Auth Controller habe.

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

So habe ich es mit der AuthenticatesUsers-Eigenschaft gemacht.

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

Fügen Sie dem Controller diese Methode hinzu:

/**
 * 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

Sie sollten den Wert $ redirectTo festlegen, um die Weiterleitung zu leiten

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

im AuthController-Konstruktor.

/**
 * 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

sie können eine Methode in LoginController hinzufügen Zeile use App\User; auf Top hinzufügen, nach dieser Add-Methode ist es für mich wkwkwkwkw, aber Sie müssen {{ csrf_field() }} in View Admin und Benutzer hinzufügen

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

in Übereinstimmung mit Laravel-Dokumentation erstelle ich in app/Http/Controllers/Auth/LoginController.php folgende Methode:

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

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

}

um die Benutzerinformationen aus meiner Datenbank abzurufen, habe ich "Illuminate\Support\Facades\Auth;" verwendet.

0
Giuseppe Muci