【发布时间】:2021-09-29 05:27:58
【问题描述】:
我遇到过很多这样的错误。但我不明白为什么这不起作用? 这是场景:我想制作一个中间件来防止经过身份验证的用户查看登录和注册表单。 所以,我已经写了 MustNotBeLoggedIn.php:
<?php
namespace App\Http\Middleware\AuthenticateUsers;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class MustNotBeLoggedIn
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (session()->has('user')) {
return redirect()->route('not_allowed');
}
return $next($request);
}
}
这里是 web.php:
Route::group(['prefix' => 'authenticate', 'middleware' => 'check.MustNotBeLoggedIn'], function () {
// Login / Register Form
Route::view('/login-register', 'authentication.login_register')->name('authenticate.login-register');
// Login, Register, Logout
Route::post('/login', [LoginAndRegisterController::class, 'login'])->name('authenticate.validate');
Route::post('/register', [LoginAndRegisterController::class, 'register'])->name('authenticate.new');
Route::post('/logout', [LoginAndRegisterController::class, 'logout'])->name('authenticate.logout');
// Forget Password
Route::view('/forget-password', 'authentication.forget_password')->name('authenticate.forget_password');
Route::get('/password-reset/{token}', function ($token) {
return view('authentication.reset_password', ['token' => $token]);
})->name('password.reset');
Route::post('/send-reset-link', [ResetPasswordController::class, 'requestLink'])->name('authenticate.send_reset_link');
Route::post('/reset', [ResetPasswordController::class, 'resetPassword'])->name('authenticate.reset_password');
});
我在 kernel.php 中注册了中间件'check.MustNotBeLoggedIn' => \App\Http\Middleware\AuthenticateUsers\MustBeLoggedIn::class,
最后一条通知:不允许的视图没有任何中间件
Route::view('/not_found', 'errors.404')->name('not_allowed');
【问题讨论】:
-
检查你的路由'not_allowed'是否不在重定向到登录的其他中间件下。
-
在注册行中,
MustBeLoggedIn应该是MustNotBeLoggedIn
标签: php laravel redirect laravel-8