0

ユーザーコントローラーに使用していますLaravel 5.3Authだから基本的に私はListenerfor AuthEventを作成します

'Illuminate\Auth\Events\Login' => [
    'App\Listeners\LogSuccessfulLogin',
],

LogSuccessfulLogin handle()の基本でユーザーをリダイレクトする機能でrole。しかし、リダイレクト機能が機能していません。デフォルトのページ '\home' ルートをレンダリングします。

私はマイファイルを共有しています:-

EventServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\SomeEvent' => [
            'App\Listeners\EventListener',
        ],
        'Illuminate\Auth\Events\Login' => [
            'App\Listeners\LogSuccessfulLogin',
        ],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
    }
}

ルート/web.php

<?php
//Auth::routes();
Route::get('logout', function(){
    Auth::logout(); // logout user
    return Redirect::to('/');
});
#Route::get('/', 'HomeController@index')->name('homepage');
Route::get('/', function () {return view('welcome');});

Route::group(['middleware' => ['auth', 'checkrole:Admin'],'namespace' => 'Admin','prefix' => 'admin'], function () {
    Route::get('/123','DashboardController@index')->name('dashboard');
    #Route::get('/','DashboardController@index')->name('dashboard');

    Route::get('user/profile', function () {
        // Uses Auth Middleware
    });
});

ここに LogSuccessfulLogin.php があります

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
class LogSuccessfulLogin
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  Login  $event
     * @return void
     */
    public function handle(Login $event)
    {

        $user=Auth::User()->role->role_name;
        if($user=="Admin"){
            return Redirect::route('dashboard');
            #return redirect()->route('login');
        }
        elseif($user == "Employer" ){
            dd("hello");
        }
    }
}

これは Auth のデフォルトの logincontroller です

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

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;

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

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

私が何か間違ったことをしている場合はお知らせください。LogSuccessfulLogin実際、ページをリダイレクトするためにリスナーでも試しましreturn redirect()->route('login');たが、機能しません。

4

1 に答える 1

2

考えられる解決策の 1 つとして、ログイン ルートにアタッチされる応答ミドルウェアを提供します。応答を取得したら、ユーザーがログインしているかどうかを確認し、ログインしている場合は、カスタム リダイレクト ログインを適用する必要があります。その場合、リダイレクトのデフォルトの Laravel 5.3 ロジックを上書きします。次のようにします。

class PostLoginMiddleware
{

    public function handle($request, Closure $next, $guard = null)
    {
        // here you've already have response and it's usually redirect
        $response = $next($request);

        // if user logged in
        if (\Auth::id()) {
             $customRedirectResponse = // ...apply your custom logic

             return $customRedirectResponse;
        }

        return $response;
    }
}

このミドルウェアを app/Http/Kernel.php で定義する必要があります

protected $routeMiddleware = [
    'custom-redirect' => \YourNamespace\PostLoginMiddleware::class
];

そして、ログインルートに適用します

/* Authentication Routes */
$this->get('login', 'Auth\AuthController@showLoginForm');
$this->post('login', ['middleware' => 'custom-redirect', 'uses' => 'Auth\AuthController@login']);
$this->get('logout', 'Auth\AuthController@logout');
于 2016-10-15T13:02:19.953 に答える