Laravel 6.x 新 password.confirm 中间件不适用于自定义保护
Laravel 6.x new password.confirm middleware doesn't work with custom guard
新的 password.confirm 功能已添加到 laravel 6.2 框架中。
我有一个全新的 laravel 6.18.8 安装,我已经完成了基于守卫的多重身份验证。
我想 运行 password.confirm 这个自定义守卫。
guard:admin 的登录/注销工作正常,登录后正确重定向到 admin/home url。到目前为止,验证我是否登录 guard:admin 是否正常工作:
- 如果我已经登录 guard:admin 尝试输入 admin/login 会将我重定向到 admin/home - 正确
- 如果我没有登录,尝试输入 admin/home 会将我重定向到 admin/login - 正确
但是
试图去 admin/secret(应该要求输入管理员密码)将我重定向到用户登录页面,因为要打开 password/confirm url(默认守卫)
当我以管理员身份登录并手动尝试打开时 url 管理员/password/confirm 显示错误
Target class [admin] does not exist.
有机会运行吗?或者制作 "as is" 并且不会使用 none 默认 auth guard?
目前我的 guard:admin 代码:
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
routes/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');
});
好的,我看到你可以指定转发到哪里,例如
middleware('password.confirm:admin.password.confirm')
然后我发现了一个问题...我真蠢 ;P 在 Admin/Auth/ConfirmPasswordController.php 文件的构造函数中,我输入了 middleware('admin:auth') 而不是 'auth:admin'
Web 路由在 routes/web.php 和 Admin 路由在 routes/Admin.php
如果我在任何 web.php Routes =>
中添加 (->middleware(password.confirm))
它就可以完成,如果我在任何 Admin.php [中添加 (->middleware(password.confirm))
Routes =>
它已经完成了,但是
如果我只添加一个 admin.php 路由就可以正常工作,并且在 web.php 路由中,中间件会自动重定向回
新的 password.confirm 功能已添加到 laravel 6.2 框架中。 我有一个全新的 laravel 6.18.8 安装,我已经完成了基于守卫的多重身份验证。 我想 运行 password.confirm 这个自定义守卫。 guard:admin 的登录/注销工作正常,登录后正确重定向到 admin/home url。到目前为止,验证我是否登录 guard:admin 是否正常工作: - 如果我已经登录 guard:admin 尝试输入 admin/login 会将我重定向到 admin/home - 正确 - 如果我没有登录,尝试输入 admin/home 会将我重定向到 admin/login - 正确
但是
试图去 admin/secret(应该要求输入管理员密码)将我重定向到用户登录页面,因为要打开 password/confirm url(默认守卫)
当我以管理员身份登录并手动尝试打开时 url 管理员/password/confirm 显示错误
Target class [admin] does not exist.
有机会运行吗?或者制作 "as is" 并且不会使用 none 默认 auth guard?
目前我的 guard:admin 代码: config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
routes/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');
});
好的,我看到你可以指定转发到哪里,例如
middleware('password.confirm:admin.password.confirm')
然后我发现了一个问题...我真蠢 ;P 在 Admin/Auth/ConfirmPasswordController.php 文件的构造函数中,我输入了 middleware('admin:auth') 而不是 'auth:admin'
Web 路由在 routes/web.php 和 Admin 路由在 routes/Admin.php
如果我在任何 web.php Routes =>
中添加 (->middleware(password.confirm))
它就可以完成,如果我在任何 Admin.php [中添加 (->middleware(password.confirm))
Routes =>
它已经完成了,但是
如果我只添加一个 admin.php 路由就可以正常工作,并且在 web.php 路由中,中间件会自动重定向回