【问题标题】:Laravel 5.4 auth::check() falseLaravel 5.4 auth::check() false
【发布时间】:2018-12-19 06:15:39
【问题描述】:

我想让我的索引页同时具有访客和身份验证功能。

客人来访时,可以尝试登录;登录后会显示用户名等信息。

路由routes/web.php:

Route::get('vendor', function () {
    return view('vendor.home');
})->name('vendor')->middleware('web');

在刀片模板中,我使用Auth::check() 进行身份验证但失败。如果我使用middleware(['web','auth:vendor']),如果访客将重定向到登录页面

@if(Auth::guest())
                    <li><a href="{{route('vendor.login')}}"> <strong><i class="fa fa-user"></i> Login </strong> </a></li>
                    <li><a href="{{route('vendor.register')}}" class="btn btn-primary oval btn-lg"> <strong>Register</strong> </a></li>
                @else
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                            {{ Auth::user()->name }} <span class="caret"></span>
                        </a>

                        <ul class="dropdown-menu" role="menu">
                            <li>
                                <a href="{{ route('vendor.logout') }}" class="btn btn-default btn-flat">Log Out</a>
                            </li>
                        </ul>
                    </li>
                @endif
                    {{ dd(Auth::check()) }}

每次我登录成功,在我刷新索引页面后,它仍然会显示登录按钮而不是用户名按钮。

这个结果

【问题讨论】:

  • 根据您的版本,您可以在 Blade 中使用 @guest ... @endguest@auth ... @endauth
  • @guest@auth 不工作
  • 你必须在你的路由上添加中间件身份验证
  • 如果我在-&gt;middleware(['web','auth']); 上添加中间件身份验证,来宾将拒绝

标签: php laravel authentication middleware


【解决方案1】:

尝试将Auth:: 替换为\Auth::auth()

@if(\Auth::guest())
                <li><a href="{{route('vendor.login')}}"> <strong><i class="fa fa-user"></i> Login </strong> </a></li>
                <li><a href="{{route('vendor.register')}}" class="btn btn-primary oval btn-lg"> <strong>Register</strong> </a></li>
            @else
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                        {{ \Auth::user()->name }} <span class="caret"></span>
                    </a>

                    <ul class="dropdown-menu" role="menu">
                        <li>
                            <a href="{{ route('vendor.logout') }}" class="btn btn-default btn-flat">Log Out</a>
                        </li>
                    </ul>
                </li>
            @endif
                {{ dd(\Auth::user()) }}

【讨论】:

  • 试一试,结果为空
  • 使用auth()-&gt;user()也返回null?您需要从控制器再次检查。
  • 请尝试\Auth::check()\Auth::user() 返回实际登录的用户。\Auth::check() 检查用户是否已登录且有效。
  • 如果我在构造 Auth::user() 工作时使用$this-&gt;middleware('auth:vendor');,但访客将重定向到登录。我没去
【解决方案2】:

这是我的答案

@if(Auth::guard('vendor')->check())
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                            {{ Auth::guard('vendor')->user()->name }} <span class="caret"></span>
                        </a>

                        <ul class="dropdown-menu" role="menu">
                            <li>
                                <a href="{{ route('vendor.dashboard') }}">Dashboard</a>
                            </li>
                            <li>
                                <a href="{{ route('vendor.logout') }}" >Log Out</a>
                            </li>
                        </ul>
                    </li>
                @else
                    <li><a href="{{route('vendor.login')}}"> <strong><i class="fa fa-lock"></i> Login </strong> </a></li>
                    <li><a href="{{route('vendor.register')}}" class="btn btn-success btn-lg"> <strong>Register</strong> </a></li>
                @endif

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 2017-11-27
    • 2018-01-07
    • 2016-05-28
    • 1970-01-01
    • 2015-12-14
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多