gpt4 book ai didi

php - 非默认守卫在 Laravel 5.5 中被忽略

转载 作者:搜寻专家 更新时间:2023-10-31 20:59:31 26 4
gpt4 key购买 nike

我正在为 REST Api 设置一个 Laravel 项目。基本上,我将用户分为两个表,User 和 Admin(模型名称)。我想使用默认 Laravel 的身份验证支架通过 Web 防护对管理员进行身份验证,并使用 JWT(tymondesigns 提供的软件包)通过 api 防护对用户进行身份验证。一切顺利。我配置了程序包,在 app/auth.php 中设置了守卫和提供程序,并且几乎可以正常工作。

我现在可以通过 Auth Scaffold 注册管理员,并通过用户的自定义登录 Controller 登录用户。我在浏览器上测试了管理员登录,它工作正常。然后在为用户设置登录之前,我将 app/auth.php 中的默认保护更改为 api(是:web)认为这是有道理的,因为大多数请求将作为 API 完成。我继续构建自定义登录 Controller 并测试了自定义登录。路由保存在不同的文件中,API 路由在 routes/api.php 和管理路由 routes/web.php。我再次在浏览器上测试管理员登录,但它不再起作用了。再次尝试将默认守卫更改为 web,它正在运行。不知何故,为每条路线定义的守卫被忽略,只使用默认守卫。我在网上阅读了很多内容,但我尝试过的所有方法都没有用。

文件如下:

配置/auth.php

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
]
],

路由/web.php

Route::get('/', function () {
return view('welcome');
});

Auth::routes();

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

路由/api.php

Route::middleware('guest')->post('login', 'UserAuth\LoginController@login')->name('user.login');

Route::middleware('auth')->get('user', 'BaseController@loggedUserAPI')
->name('user.user');

感谢任何形式的帮助或建议。

最佳答案

正如您所说,您使用的是 Laravel 提供的默认身份验证脚手架,您必须覆盖 Http/Controllers/Auth/LoginController 中的 guard() 方法,否则将始终使用默认保护。

/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
// specify the guard that should be used for login attempts
return Auth::guard('web');
}

您还应该修改 LoginController 的构造函数以使用正确的中间件:

public function __construct()
{
$this->middleware('guest:web')->except('logout');
}

在你的 routes/web.php 文件中,你必须告诉你的 auth 和 guest 中间件使用正确的守卫(如果它不是默认的)

//例如:

Route::middleware('auth:web')->get('admin', 'AdminController@dashboard')
->name('user.user');

关于php - 非默认守卫在 Laravel 5.5 中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com