0

laravel 6.2 框架中添加了一个新的 password.confirm 功能。我有一个全新的 laravel 6.18.8 安装,我已经完成了基于 guard 的多重身份验证。我想为这个自定义守卫运行 password.confirm。在登录正确重定向到 admin/home url 后,guard:admin 的登录/注销工作正常。验证我是否登录到 guard:admin 到目前为止工作正常: - 如果我已经登录到 guard:admin 尝试输入 admin/login 会将我重定向到 admin/home - 正确 - 如果我没有登录在,输入 admin/home 的尝试会将我重定向到 admin/login - 正确

试图去管理员/秘密(应该要求管理员密码)将我重定向到用户登录页面,因为打开密码/确认 url(用于默认保护)

当我以管理员身份登录并手动尝试打开 url admin/password/confirm 时显示错误

Target class [admin] does not exist. 

有没有机会运行这个?还是“按原样”制作并且不会使用没有默认的身份验证保护?

目前我的守卫代码:管理员: config/auth.php

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

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

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],

路线/web.php

/*
|--------------------------------------------------------------------------
| Web Routes for admin panel
|--------------------------------------------------------------------------
|
|
*/

Route::prefix( env('ADMIN_PREFIX', 'admin') )->name('admin.')->namespace('Admin')->group(function () {
    // Auth::routes(['register' => false, 'verify' => false]);
    // Login/out process
    Route::get('/login', 'Auth\LoginController@showLoginForm')->name('login');
    Route::post('/login', 'Auth\LoginController@login')->name('login');
    Route::post('/logout', 'Auth\LoginController@logout')->name('logout');
    // Password reset process
    Route::get('/password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
    Route::get('/password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
    Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
    Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');
    // Password confirmation process
    Route::get('/password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm');
    Route::post('/password/confirm', 'Auth\ConfirmPasswordController@confirm')->name('password.confirm');

    Route::middleware('auth:admin')->group(function() {
        Route::view('/home', 'admin.home')->name('home');
        Route::view('/secret', 'admin.secret')->name('secret')->middleware('password.confirm');
    });
4

2 回答 2

1

好的,我看到您可以指定转发的位置,例如

middleware('password.confirm:admin.password.confirm')

我发现了一个问题......愚蠢的我;P 在 Admin/Auth/ConfirmPasswordController.php 文件的构造函数中,我输入了 middleware('admin:auth') 而不是 'auth:admin'

于 2020-04-21T20:15:46.347 回答
0

Web 的路由在 routes/web.php 和 Admin 的路由在 routes/Admin.php

如果我添加(->middleware(password.confirm))任何 web.phpRoutes =>它可以完成,如果我添加(->middleware(password.confirm))任何 Admin.phpRoutes =>它可以完成,但是

如果我只添加一个 admin.php 路由正常工作,并且在 web.php 路由中,中间件会自动重定向回来

于 2020-09-14T19:53:36.203 回答