【问题标题】:API JWT guard and web session guard in LaravelLaravel 中的 API JWT 保护和 Web 会话保护
【发布时间】:2021-01-05 19:47:50
【问题描述】:

我正在尝试使用多个警卫来制作 Laravel - 取决于身份验证类型。

当我通过 API 进行身份验证时,我想使用 jwt 守卫。当我通过网络进行身份验证时,我想使用sessionguard。

我的config\auth.php 看起来像这样:

'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            //'hash' => false,
        ],
    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
]

我的routes/web.php 看起来像这样:

Route::get('/', 'HomeController@index')->name('home');
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

我的routes/api.php 看起来像这样:

Route::post('login', 'AuthController@login');
Route::get('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::get('me', 'AuthController@me');

我得到的是 API 身份验证工作正常,而网络却不行。我已经调试过了,它似乎总是在检查jwt 守卫。

有人可以帮我吗,如果可能的话,我如何将警卫设置在路线上或Auth::routes() 电话上?

【问题讨论】:

  • 在处理来自“网络”路由的任何操作时,您必须指定要使用的警卫……或者您必须使用 web 参数应用 auth 中间件,@ 987654335@ 以便它将默认设置为web 用于受该中间件保护的路由......大多数用于身份验证的控制器都在其构造函数中定义了中间件
  • @lagbox 你能帮我看看你会怎么做吗?你认为我在Route::group(['middleware' => ['auth:web']], function () { 中包含routes/web.php 代码吗?
  • 否,因为所有内容都不需要进行身份验证,并且这些控制器在其构造函数中定义了它们的中间件......您将默认保护保留为 web 并修改您的内容可能会更容易需要“api”端
  • @lagbox 这是我的第一个想法,我尝试过这样,但后来我很难使用 API 进行身份验证,因为它总是需要令牌(即使在登录 url 上)
  • 因为auth 中间件仅适用于需要经过身份验证的用户的路由;登录路由必须允许未经身份验证的用户访问它,否则他们无法进行身份验证

标签: laravel jwt laravel-jwt


【解决方案1】:

我已经通过将默认设置切换为web 路由解决了这个问题。

然后我更新了app/Http/Controllers/AuthController.php 的代码,以在我使用auth 方法的任何地方使用特定的api 身份验证:

auth('api')->attempt($validator->validated())'expires_in' => auth('api')->factory()->getTTL() * 60

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 2015-06-16
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多