我一直在努力解决这个问题,我现在正在尝试将未登录用户的所有网址重定向到登录页面,它给了我这个错误,我肯定是因为它是在/ login URL上创建一个循环。身份验证也是在登录页面中检查授权用户。但是我希望在检查auth时登录页面应该是一个例外。我可能做错了,我无法得到。这是我的代码。
routes.php文件
Route::post('login', 'Auth\AuthController@login');
Route::get('login' , 'Auth\AuthController@showLoginForm');
Route::get('/' , 'Auth\AuthController@showLoginForm');
kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Auth\Access\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'acl' => \App\Http\Middleware\CheckPermission::class,
];
验证课程
class Authenticate
{
public function handle($request, Closure $next, $guard = null) {
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
}
AuthController类
class AuthController extends Controller {
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectTo = '/dashboard';
protected $loginPath = '/login';
protected $redirectPath = '/dashboard';
public function __construct(){
$this->middleware('auth', ['except' =>'login']);
/* I have been trying these many things to fix this, all in loss.
// $this->middleware('acl'); // To all methods
// $this->middleware('acl', ['only' => ['create', 'update']]);
// $this->middleware('guest', ['only' => ['/login']]);
// echo "Message"; exit;
// $this->middleware('auth');
// $this->middleware('auth', ['only' => ['login']]);
// $this->middleware('auth', ['only' => ['/login']]);
// $this->middleware('auth', ['except' => 'login']);
// $this->middleware('guest');
// $this->middleware('guest', ['only' => ['logout' , 'login', '/login', '/']]);
}
请帮助我,这一切都在我的头上,对我来说似乎是某种火箭科学。好顺便说一下,我是laravel的新手,可能会做一些愚蠢的事情,为此道歉。在此先感谢。
答案 0 :(得分:3)
您需要在Laravel组外添加路由登录:
<强> routes.php文件强>
Route::auth();
Route::group(['middleware' => 'auth'], function () {
// All route your need authenticated
});
另外,您可以使用以下方式查看您的路线列表:
php artisan route:list
答案 1 :(得分:1)
为什么要这样做只是为了将每个未登录的用户重定向到登录表单?
我认为你可以这样做
<强> routes.php文件强>
Route::post('login', 'Auth\AuthController@login');
Route::get('login' , 'Auth\AuthController@showLoginForm');
Route::get('/' , 'Auth\AuthController@showLoginForm');
Route::group(['middleware' => 'auth'], function () {
// any route here will only be accessible for logged in users
});
和auth controller构造应该是这样的
AuthController
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
答案 2 :(得分:1)
问题出在您的路线上。
当我进入并且我没有退出时,您将我发送到登录(获取)路线。当您在AuthController中的构造函数中指定中间件时,每次调用AuthController的方法时,都会再次调用构造函数并在登录时将其发回...并且它会无限重复。
答案 3 :(得分:0)
喜欢@mkmnstr说
问题出在您的路线上。 当我进入并且我没有退出时,你发送给我登录(获取)路线。当您在AuthController中的构造函数中指定中间件时,每次调用AuthController的方法时,都会再次调用构造函数并在登录时将其发回...并且它会无限重复。
修复你应该添加
Auth::logout();
下面
...
} else {
Auth::logout(); // user must logout before redirect them
return redirect()->guest('login');
}
...
答案 4 :(得分:0)
如果使用自定义中间件,则必须遵循所有规则 就我而言,我必须在Web中间件组中定义一个自定义路由类。 在复制粘贴的世界中,有时我们会犯错误。
中间件:
pkill -USR1 trap-test.sh; pkill -USR1 trap-test.sh
我在Kernel.php中的错误
如果存在于Web $ middlewareGroups中的自定义中间件类将检查条件2次,那么它将给出错误,例如:重定向您太多次
public function handle($request, Closure $next)
{
if(!isset(session('user'))){
return redirect('login');
}
return $next($request);
}
}