Я использую Laravel 5.3
, в котором с помощью Auth
для пользовательского контроллера. Поэтому в основном я создать Listener
для Auth
EventПеренаправление не работает в LogSuccessfulLogin handle в Laravel Auth
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
и в LogSuccessfulLogin
handle()
функции перенаправления пользователя на основной из role
. но моя функция перенаправления не работает. Он отображает страницу по умолчанию «\ home».
Я делюсь My Files: -
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();
//
}
}
Route/web.php
<?php
//Auth::routes();
Route::get('logout', function(){
Auth::logout(); // logout user
return Redirect::to('/');
});
#Route::get('/', '[email protected]')->name('homepage');
Route::get('/', function() {return view('welcome');});
Route::group(['middleware' => ['auth', 'checkrole:Admin'],'namespace' => 'Admin','prefix' => 'admin'], function() {
Route::get('/123','[email protected]')->name('dashboard');
#Route::get('/','[email protected]')->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");
}
}
}
и это e default logincontroller of Auth
<?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');
, но ее также не работает.
возможно дубликат HTTP: //stackoverflow.com/questions/39532803/laravel-5-3-custom-path-for-post-authentication-redirect – Silwerclaw
в любом случае вы ошибаетесь, чтобы вернуть объект перенаправления из Event - приложение не прослушивает, какой обработчик события возвращается. Вы можете перенаправить пользователя, возвращая только Redirect :: to() из контроллера, промежуточного программного обеспечения или обратного вызова маршрута. – Silwerclaw
На самом деле я разработчик 'symfony', и недавно я работаю над Laravel. В sf мы можем перенаправить из LoginsuccessHanlder. –