Laravel 5.1真的有很少的文档.. 我需要清楚了解如何使用Auth middileware保护路由..
文档告诉添加“middleware”=>路由的“auth”参数。 或者可以做到
public function __construct()
{
$this->middleware('auth');
}
但是如何使用Auth中间件进行实际用户身份验证并自动重定向到受保护路由的/登录?
答案 0 :(得分:12)
在Kernel.php中 - 在受保护的$ routeMiddleware下有注册的中间件,如下所示:
public Set<Thing> downloadEverything(Directory directory) {
Set<Thing> result = new HashSet<>();
downloadEverything(directory, result);
}
private void downloadEverything(Directory directory, Set<Thing> result) {
for (File file : getFilesOfDirectory() {
result.add(downloadThingFromFile(file));
}
for (Directory subDirectory : getSubdirectoriesOfDirectory(directory) {
downloadEverything(subDirectory, result);
}
}
private Thing downloadThingFromFile(File file) {
// ...
}
您可以看到'auth'已注册使用App \ Http \ Middleware \ Authenticate。
然后你可以按照这条路径 - 如果你打开 /app/Http/Middleware/Authenticate.php , 你会发现公共功能句柄:
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
这里是管理重定向的地方,您可以根据自己的需要对其进行修改,也可以创建自定义中间件。
最后 - 因为它是在文档中编写的 - 在控制器中,需要进行身份验证,您将添加
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('auth/login');
}
}
return $next($request);
}
如果提供的中间件不符合您的需求,您可以创建它。
答案 1 :(得分:6)
在laravel 5.2上如果你想隐藏注册表单或登录表单视图,你应该使用你的中间件:
$this->middleware('mymiddleware', ['only' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);
OR
$this->middleware('mymiddleware', ['except' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);
这是因为注册和登录路由是AuthController上的post方法,而showXxxxForm是表单视图。
希望它可以帮助任何人。
答案 2 :(得分:0)
在Laravel中,中间件用于一些路由只有用户登录才能访问,否则会重定向到登录页面。
Auth::routes();
Route::middleware(['auth'])->group(function () {
//After Login the routes are accept by the loginUsers...
}
Route::middleware(['admin'])->group(function(){
//the Admin is logged in to access the Routes...
}