Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 我已成功登录用户,但Auth::check()和Auth::User()不';我好像不工作_Authentication_Laravel 5 - Fatal编程技术网

Authentication 我已成功登录用户,但Auth::check()和Auth::User()不';我好像不工作

Authentication 我已成功登录用户,但Auth::check()和Auth::User()不';我好像不工作,authentication,laravel-5,Authentication,Laravel 5,我已经使用LoginController成功地用Laravel 5.4验证了登录用户的身份,并且有一个事件侦听器让我知道我已经这样做了。但是,在我的示例中,我试图选中Auth::guest(),以动态显示登录用户的视图或来宾用户的视图。然而,我总是看到客户用户的观点 LoginController: namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundatio

我已经使用
LoginController
成功地用Laravel 5.4验证了登录用户的身份,并且有一个事件侦听器让我知道我已经这样做了。但是,在我的示例中,我试图选中
Auth::guest()
,以动态显示登录用户的视图或来宾用户的视图。然而,我总是看到客户用户的观点

LoginController:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
     use AuthenticatesUsers;

     protected $redirectTo = '/register';

     public function __construct()
     {
          $this->middleware('guest')->except('logout');
     }

     public function username()
     {
         return 'username';
     }
 }
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        //

        parent::boot();
    }

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::group(array(
            'middleware' => ['web', 'auth'],
            'namespace' => $this->namespace,
        ), function ($router) {
            require base_path('routes/web.php');
        });

    }

    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
}
Config/Auth:

 <?php

     return [


     'defaults' => [
         'guard' => 'web',
         'passwords' => 'user',
      ],

      'guards' => [
         'web' => [
             'driver' => 'session',
             'provider' => 'user',
         ],

         'api' => [
             'driver' => 'token',
             'provider' => 'user',
         ],
      ],

      'providers' => [
           'user' => [
               'driver' => 'eloquent',
               'model' => App\User::class,
            ],
      ],


      'passwords' => [
           'user' => [
               'provider' => 'user',
               'table' => 'password_resets',
               'expire' => 60,
           ],
       ],
  ];
app.blade:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Styles -->
    <link href="{{ asset('assets/css/all.css') }}" rel="stylesheet">
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-default navbar-static-top">
            <div class="container">
                <div class="navbar-header">

                    <!-- Collapsed Hamburger -->
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
                        <span class="sr-only">Toggle Navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>

                    <!-- Branding Image -->
                    <a class="navbar-brand" href="{{ url('/') }}">
                        {{ config('app.name', 'Laravel') }}
                    </a>
                </div>

                <div class="collapse navbar-collapse" id="app-navbar-collapse">
                    <!-- Left Side Of Navbar -->
                    <ul class="nav navbar-nav">
                        &nbsp;
                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="nav navbar-nav navbar-right">
                        <!-- Authentication Links -->
                        @if (!Auth::check())
                            <li><a href="{{ route('login') }}">Login</a></li>
                            <li><a href="#">{{Auth::check()}}</a></li>
                            <li><a href="{{ route('register') }}">Register</a></li>
                        @else
                            <li class="dropdown">
                                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                    {{ Auth::user() }} <span class="caret"></span>
                                </a>

                                <ul class="dropdown-menu" role="menu">
                                    <li>
                                        <a href="{{ route('logout') }}"
                                            onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                            Logout
                                        </a>

                                        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                            {{ csrf_field() }}
                                        </form>
                                    </li>
                                </ul>
                            </li>
                        @endif
                    </ul>
                </div>
            </div>
        </nav>

        @yield('content')
    </div>

    <!-- Scripts -->
    <script src="{{ asset('assets/js/app.js') }}"></script>
</body>
</html>
Http\Kernal:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

在my RouteService Provider中,此函数加载我的大部分应用程序路由

protected function mapWebRoutes()
{
    Route::group(array(
        'middleware' => ['web', 'auth'],
        'namespace' => $this->namespace,
    ), function ($router) {
        require base_path('routes/web.php');
    });
}
然后在app/Http/Kernel中

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth'              => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic'        => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];

注意路由组中的
'middleware'=>['web','auth'],
部分。中间件也可以根据需要应用于各个路由。

您是否将身份验证中间件应用于登录后需要身份验证的路由?您能否给我举个例子,我可以检查一下是否适用?如果这是我应该密切注意的事情,那么我可能没有。请看我的答案,例如@Alex MacI感到困惑,因为“web”不是$middlewareGroups,而“auth”不是$routeMiddleware吗?那么它们怎么可能都是中间件呢?当我点击我的登录视图和登录控制器时也应用了这个。它会重定向,直到达到最大重定向次数。是的,但请记住web和auth只是别名,内核会将它们分别推送到中间件堆栈上。将Auth::routes()调用移到最顶端。我记得读过一些关于它们需要优先排序的文章;到您的测试路径,这可能会导致重定向循环。我仍然重定向到登录一遍又一遍。我将LoginController更改为受保护的$redirectTo='/register';。谢谢你的帮助。我现在正在查看LoginRegister上的类,看看是否可以在某个地方找到流。然而,我已经对AuthenticateUsers上的所有方法进行了测试,没有任何方法受到影响。然而,它至少击中了LoginController构造函数。以及通过分配中间件。接下来我应该检查什么。我转到路由中的哪个页面并不重要,它们都重定向到登录并进入某个重定向循环。这似乎与我们在RouteServiceProvider的mapWebRoutes()中放置的内容有关。我将其更改为Route::middleware('web','auth')->namespace($this->namespace)->group(base_path('routes/web.php');。这样行吗?
/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth'              => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic'        => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];