如果我插入有效或无效的凭据,则无关紧要,用户始终会重定向到RedirectIfAuthenticated中间件中定义的路由。我的问题:如何将经过身份验证的用户重定向到与未经过身份验证的用户不同的路由?
RedirectIfAuthenticated(中间件):
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
这是我的LoginController:
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
public function authenticate(Request $data){
if (Auth::attempt( ['cnpj' => $data['cnpj'], 'password' => $data['password'] ] )){
return redirect()->route('someroute');
}
else{
return redirect()->route('login');
}
路线:
Route::get('/', function () {
return view('welcome');
}) -> name('/');
Route::post('/register', 'Auth\RegisterController@create');
Route::get('/register', function () {
return view('auth.register');
});
Route::get('/login', function (){
return view('auth.login');
})->name('login');
Route::post('/login', 'Auth\LoginController@authenticate');
答案 0 :(得分:1)
在LoginController
中,您已将guest
中间件设置为适用于除logout
之外的所有路由。这意味着经过身份验证的用户永远无法访问authenticate
方法,因为中间件已经运行并已重定向用户。
最简单的解决方法是将authenticate
方法添加到guest
中间件的排除项中:
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'authenticate']]);
}
从您的问题看来,您并不真正了解Laravel的中间件,路由和身份验证概念。我强烈建议您重新阅读有关这些功能的文档,因为您似乎正在尝试手动实现框架中已存在的功能。