首页 文章

Laravel 5.5中忽略了非默认防护

提问于
浏览
3

我'm setting up a Laravel project for REST Api. Basically I'm潜水用户进入拖表,用户和管理员(型号名称) . 我想使用Default Laravel的Authentication Scaffold通过网络防护来验证管理员,并使用JWT(tymondesigns提供的软件包)通过api guard对用户进行身份验证 . 一切顺利 . 我配置了软件包,在app / auth.php中设置了警卫和提供程序,几乎让它运行起来 .

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

这是文件:

配置/ 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');

任何形式的帮助或建议表示赞赏 .

1 回答

  • 2

    正如您所说,您使用的是默认的Authentication Scaffold Laravel,您必须覆盖Http / Controllers / Auth / LoginController中的guard()方法,否则将始终使用默认的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文件中,您必须告知您的身份验证和访客中间件使用正确的防护(如果它不是默认的防护)

    // 例如:

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

相关问题