返回

让 Laravel 应用程序支持多重认证守卫,让开发过程更轻松

见解分享

多重认证简介

在 Laravel 中,认证守卫是用来保护应用程序中特定区域或路由的安全。每个认证守卫都有自己的一套认证方法和规则。例如,您可以为管理员创建一个认证守卫,并为普通用户创建一个不同的认证守卫。这样,管理员就可以访问只有他们才能访问的特定页面,而普通用户只能访问他们自己的页面。

如何在 Laravel 中设置和使用多个认证守卫

  1. config/auth.php 配置文件中定义认证守卫。
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
];

在上面的示例中,我们定义了两个认证守卫:webapiweb 守卫用于保护 Web 应用程序,而 api 守卫用于保护 API 请求。

  1. app/AuthServiceProvider.php 服务提供者中注册认证守卫。
public function boot()
{
    $this->registerPolicies();

    Auth::extend('web', function ($app, $name, array $config) {
        return new SessionGuard(
            $app['Illuminate\Contracts\Auth\UserProvider'],
            $app['session.store']
        );
    });

    Auth::extend('api', function ($app, $name, array $config) {
        return new TokenGuard(
            $app['Illuminate\Contracts\Auth\UserProvider'],
            $app['request'],
            $app['cookie'],
        );
    });
}

在上面的示例中,我们注册了 webapi 认证守卫。

  1. 在控制器或中间件中使用认证守卫。

您可以使用 Auth::guard() 方法来获取当前的认证守卫。例如,以下代码使用 web 认证守卫来保护 HomeControllerindex() 方法:

public function index()
{
    // 检查用户是否已通过 `web` 认证守卫进行身份验证。
    if (Auth::guard('web')->check()) {
        // 用户已通过身份验证,显示主页。
        return view('home');
    }

    // 用户未通过身份验证,重定向到登录页面。
    return redirect('/login');
}

结论

在 Laravel 中使用多个认证守卫可以大大简化开发过程,允许不同类别的用户访问相同应用程序的不同部分。本文为您提供了在 Laravel 中设置和使用多个认证守卫的分步指南,并提供了示例代码来帮助您快速入门。