在Laravel 5.4中,我有一个Page模型,我想在DB中添加一个新字段,有条件地要求身份验证来浏览页面。
所以基本上我想要提供页面,每个人都可以访问某些页面,有些页面需要用户进行身份验证。如果需要对用户进行身份验证以查看该页面,则他将被重定向到登录页面。
我如何在Laravel中实现它?
我在考虑Gate,但我不确定如何混合未经身份验证和验证的规则。
谢谢你们!
EDIT
我在PageController
:
public function index($id)
{
$page = Page::findOrFail($id);
if ($page->require_auth && !Auth::check()) {
return redirect()->guest('login');
}
return view('page', compact('page'));
}
但我仍然不确定这是最好的地方吗?
答案 0 :(得分:0)
如果要对经过身份验证的用户进行一些页面限制,可以使用默认的auth中间件。
要使用默认值,请运行:
php artisan make:auth
这将创建:
然后,你可以简单地使用“middleware:auth”(检查:app / Http / Kernel.php来查看所有中间件)。
或者,您可以简单地创建自己的中间件:
php artisan make:middleware MyAuthMiddleware ## This generate a new middleware file inside app/Http/Middleware
你可以这样做:
<?php
namespace App\Http\Middleware;
use Closure;
class MyAuthMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->check()) {
abort(403, 'Access denied');
}
return $next($request);
}
}
之后,只需将此类的引用添加到Kernel.php(app / Http / Kernel.php)中。
<?php
// ....
protected $routeMiddleware = [
'my-auth' => \App\Http\Middleware\MyAuthMiddleware::class
];
有关中间件的更多信息:https://laravel.com/docs/5.5/middleware