【问题标题】:Redirecting many times laravel 8多次重定向laravel 8
【发布时间】: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' =&gt; \App\Http\Middleware\AuthenticateUsers\MustBeLoggedIn::class,

最后一条通知:不允许的视图没有任何中间件

Route::view('/not_found', 'errors.404')->name('not_allowed');

【问题讨论】:

  • 检查你的路由'not_allowed'是否不在重定向到登录的其他中间件下。
  • 在注册行中,MustBeLoggedIn应该是MustNotBeLoggedIn

标签: php laravel redirect laravel-8


【解决方案1】:

登录和注册路由不应该在经过身份验证的路由组中,试试这个

Route::group(['prefix' => 'authenticate', 'middleware' => 'check.MustNotBeLoggedIn'], function () {
    
    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');
});

Route::group(['middleware'=>'guest'], 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');
});

【讨论】:

  • 感谢它的工作,但是如果用户已经通过身份验证,访客中间件会重定向到哪里?
  • 我删除了我的中间件 check.MustNotBeLoggedIn 并将其替换为来宾。它工作得很好......
  • 它会根据情况将认证的用户重定向到主页或仪表板,它确保只有未认证的用户才能查看登录和注册页面。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多