Php Laravel 5.5登录表单在每个页面上刷新,而不是重定向

Php Laravel 5.5登录表单在每个页面上刷新,而不是重定向,php,authentication,redirect,laravel-5,Php,Authentication,Redirect,Laravel 5,对于需要登录/注册系统和大量CRUD操作的web项目,我选择学习Laravel。我在学校有一些MVC.NET和Spring的经验,虽然有很多相似之处,但有些东西有点不同。。。这个项目的要求是,它有一个登录表单在每个页面时,没有登录(客人)。该表单在登录(auth)时更改为用户的“配置文件”。我遇到的问题是,当我登录并尝试使用RedirectIfAuthenticated中间件重定向时,出于某种原因,我进入了一个无限的重定向循环。是否有一种解决方案可以在每个页面上创建一个登录表单,而不是重定向到另

对于需要登录/注册系统和大量CRUD操作的web项目,我选择学习Laravel。我在学校有一些MVC.NET和Spring的经验,虽然有很多相似之处,但有些东西有点不同。。。这个项目的要求是,它有一个登录表单在每个页面时,没有登录(客人)。该表单在登录(auth)时更改为用户的“配置文件”。我遇到的问题是,当我登录并尝试使用RedirectIfAuthenticated中间件重定向时,出于某种原因,我进入了一个无限的重定向循环。是否有一种解决方案可以在每个页面上创建一个登录表单,而不是重定向到另一个视图,只需刷新页面并使用Blade的模板引擎设置正确的值? 我已经用
php-artisan-make:auth
命令创建了这个基础,并自己做了一些更改。我将在相应的类中发布我所拥有的一些片段

让我们了解一下它的外观以及为什么每页都需要一个表单:(顺便说一句,我把它放在layouts/app.blade.php的页脚中。

Routes/web.php: 我将Facade Auth::routes()解压到这个位置,以便进行更改。我暂时离开了登录,但当我的东西正常工作时,它应该消失了。我写的下面两条注释

Route::get('/', 'HomeController@index')->name('home');
Route::get('home', 'HomeController@index')->name('home');

Route::get('teams', 'HomeController@teams')->name('teams');
Route::get('schedules', 'HomeController@schedules')->name('schedules');
Route::get('tables', 'HomeController@tables')->name('tables');
Route::get('rules', 'HomeController@rules')->name('rules');

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...

// Password Reset Routes...
HomeController.php

在这里,我怀疑构造函数中的配置作为中间件应该是“guest”还是“auth”

    class HomeController extends Controller
    {
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Show the homepage.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('home');
    }

    //other pages omitted
    }
LoginController.php(与artisan auth没有区别):

RedirectIfAuthenticated.php:

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('home');
        }

        return $next($request);
    }
}
App.blade.php:

@if (Auth::guest())

    //login form omitted ...

@else

   <!-- TODO: check for role & display correct nav -->
   <h2>Logged in!</h2>

  <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
      {{ csrf_field() }}
  </form>
 @endif
@if(Auth::guest())
//忽略登录表单。。。
@否则
登录!
{{csrf_field()}}
@恩迪夫
如果你需要更多信息,请告诉我。
提前感谢。

在您的
web.php
路由文件中,您两次声明了主路由:

Route::get('/', 'HomeController@index')->name('home');
Route::get('home', 'HomeController@index')->name('home');
我想换成:

Route::get('/', 'HomeController@index')->name('home');
然后在
登录控制器中
需要更新
$redirectTo
以反映该更改。因此:

protected $redirectTo = '/';
对于您的
redirectifiauthenticated
中间件也一样:

if (Auth::guard($guard)->check()) {
    return redirect('/');
}
最后但并非最不重要的一点是,您的
HomeController
中间件不正确。
guest
用于仅在未经身份验证时才可访问的路由,例如登录、注册或忘记密码。但是,由于您希望
HomeController
的路由仅可由经过身份验证的用户访问,因此您必须更改到
auth
的中间件:

public function __construct()
{
    $this->middleware('auth');
}

这似乎有效。唯一的问题是,当我单击注销链接时,它会按预期注销,但会重定向到/登录。知道在哪里更改此重定向吗?而且,当我登录时,我也可以访问主页、团队页面等,但一旦我注销,我就无法再访问它们了……更具体地说,我想成为所有可访问的页面可用于guest和auth,但只需更改底部的登录名…这就是为什么我会与guest/auth混淆,因为它只是注销重定向路径的一部分:您可以在
LoginController
中更改,方法是更改其中的。如果我理解正确,您希望
HomeController
中的所有内容都正确可供经过身份验证和未经身份验证的用户访问?在这种情况下,您应该既不指定
guest
也不指定
auth
中间件。
public function __construct()
{
    $this->middleware('auth');
}