Laravel 6.x新密码。确认中间件不适用于自定义防护

时间:2020-04-21 19:22:49

标签: php laravel middleware guard password-confirmation

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

但是

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

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

Target class [admin] does not exist. 

是否有机会运行此程序?还是“按原样”制作,并且不会使用默认的默认身份验证防护?

目前,我的卫兵代码: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');
    });

2 个答案:

答案 0 :(得分:1)

好的,我知道您可以指定转发位置,例如

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

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

答案 1 :(得分:0)

Web的路由在routes / web.php中,而Admin的路由在routes / Admin.php中

如果我在任何web.php import React, { useState } from 'react'; import { View, Text, TextInput } from 'react-native'; function Hooking() { const [value, setValue] = useState('..') const [name, setName] = useState('') console.log("sasasa") return ( <View> <TextInput style={{borderColor:'gray', borderWidth:1}} value={value} onChange={e => setValue(e.target.value)} /> <Text>mi llamo: {value}</Text> <Text>name: {value}</Text> </View> ) } export default Hooking; 中添加(->middleware(password.confirm)),就可以完成;如果我在Admin.php Routes =>中添加(->middleware(password.confirm)),则可以完成完成,但是

如果我仅添加了一个admin.php路由,并且在web.php路由中都正常运行,则中间件会自动重定向回