Laravel-使用中间件做用户认证和权限管理

本文介绍了如何在 Laravel 中利用中间件进行用户认证和权限管理。通过创建自定义中间件 RoleMiddleware 和 AdminMiddleware,实现针对管理员的身份验证和权限控制。未通过验证的用户将被重定向到登录页面。中间件还能用于其他任务,如CORS和日志记录。自定义中间件需在 app/Http/Middleware 目录下创建,并在 app/Http/Kernel.php 文件中注册,然后通过路由组或控制器构造方法应用中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP请求,例如,Laravel包含验证用户身份权限的中间件。如果用户没有通过身份验证,中间件会重定向到登录页,引导用户登录。反之,中间件将允许该请求继续传递到应用程序。

当然,除了身份验证以外,中间件还可以被用来执行各式各样的任务,如:CORS中间件负责为所有即将离开应用的响应添加适当的头信息;日志中间件可以记录所有传入应用的请求。

Laravel 已经内置了一些中间件,包括身份验证、CSRF保护等。所有的中间件都放在 app/Http/Middleware 目录内。

1、创建中间件

这里要实现两个过滤,一是只允许管理员登录后台(RoleMiddleware),二是只有管理员用户有权限操作后台(AdminMiddleware),

没有通过验证则跳回登录页或者抛出异常页。创建命令:

vagrant@homestead:~/Code/myblog$ php artisan make:middleware RoleMiddleware
Middleware created successfully.
vagrant@homestead:~/Code/myblog$ php artisan make:middleware AdminMiddleware
Middleware created successfully.

RoleMiddleware:

namespace App\Http\Middleware;
use Closure;
use App\Models\User;
class RoleMiddleware
{
    /**
     * 只允许管理员登录
     */
    public function handle($request, Closure $next)
    {
        if($request->input('email')){
            $user = User::where('email',$request->input('email'))->first();
            if ($user->is_admin != 1) {
                session()->flash('danger','您不是管理员');
                return redirect('admin/login');
            }
        }
        return $next($request);
    }
}


AdminMiddleware:

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class AdminMiddleware
{
    /**
     * 只允许管理员操作
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check()){
            $user = Auth::user();
            if ($user->is_admin != 1) {
                return abort(403);
            }
        }
        return $next($request);
    }
}

2、注册中间件,可以全局注册,也可以手动指定

这里采用手动方式:

如果你想为特殊的路由指定中间件,首先应该在 app/Http/Kernel.php 文件内为该中间件指定一个 键值

默认情况下 Kernel 类的 $routeMiddleware 属性已经包含了 Laravel 内置的中间件条目。加入自定义的中间件,

只需把它附加到此列表并指定你定义的键值即可。例如:

 

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'role' => \App\Http\Middleware\RoleMiddleware::class,
        'adminAuth' => \App\Http\Middleware\AdminMiddleware::class,
    ];

3、使用中间件,使用路由组为请求加上中间件

//后台路由组

Route::group(['middleware' => 'adminAuth'], function () {
    Route::get('/admin','IndexController@index')->name('admin');
    ...
});

这里可以加上多个中间件名称,也可以直接在类的构造方法中调用:

class ArticlesController extends Controller
{
    public function __construct()
    {
       $this->middleware('auth');
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值