【问题标题】:Cannot use Auth::user() in blade template in Laravel 5.4无法在 Laravel 5.4 的刀片模板中使用 Auth::user()
【发布时间】:2017-12-18 16:51:00
【问题描述】:

我想用guestauth 函数创建我的索引页。

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

以下是我所做的。

路由定义在routes/web.php:

Route::get('/', 'CommonController@index');
Auth::routes();

index的刀片模板中,我使用Auth::user()验证身份验证失败。

@if(Auth::user())
    <div id="user-panel">
        <a href="" class="user-panel-button">
            New Article
        </a>
        <div class="btn-group user-panel-button">
            <a type="button" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                {{ Auth::user()->name }} <span class="caret"></span>
            </a>
            <ul class="dropdown-menu">
                <li><a href="{{ Auth::logout() }}">Logout</a></li>
            </ul>
        </div>
    </div>
@else
    <a href="{{ url('login') }}" class="button">
        Login
    </a>
@endif

每次登录成功,刷新索引页后,还是会显示login按钮而不是用户名按钮。

我查看了会话信息,一旦我刷新页面,login_web_xxxxxxxxxxx 会话就会消失。

此外,当我使用 Laravel 默认路径进行身份验证 /home 时,它起作用了。无论您刷新页面多少次,都可以始终显示用户名。

我应该如何解决这个问题?非常感谢。

【问题讨论】:

  • 您的存储文件夹是否有正确的权限?
  • 您正在调用Auth::logout(),这实际上将用户注销,无需单击按钮。
  • 我很确定我没有在这里调用Auth::logout(),并且存储文件夹的权限是正确的,因为HomeController中路径home的默认页面是有效的。无论我刷新页面多少次,login_web_xxx 会话都可用。
  • &lt;li&gt;&lt;a href="{{ Auth::logout() }}"&gt;Logout&lt;/a&gt;&lt;/li&gt;
  • 啊,我明白了。我知道如何正确行事。谢谢,@aynber

标签: php laravel authentication laravel-5.4


【解决方案1】:

对于 Laravel 5.4,您可以使用:

@if(Auth::check())
    // The user is authenticated...
@else
    // The user is not authenticated...
@endif

对于 Laravel 5.5 及更高版本:

@auth
    // The user is authenticated...
@endauth

@guest
    // The user is not authenticated...
@endguest

【讨论】:

    【解决方案2】:

    您也可以像这样在刀片文件中使用 Auth 的完整类路径

    @if(\Illuminate\Support\Facades\Auth::check())
     // code here
    @endif
    

    【讨论】:

      【解决方案3】:

      而不是使用

      <ul class="dropdown-menu">
          <li><a href="{{ Auth::logout() }}">Logout</a></li>
      </ul>
      

      注销最好如下代码,官方resources/view/layouts/app.php提供

      <ul class="dropdown-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>
      

      【讨论】:

        【解决方案4】:

        更新routes/web.php文件为

        Route::group(['middleware' => 'web'], function () {
          Route::get('/', 'CommonController@index');
          Auth::routes();
        }
        

        现在要在刀片模板中检查身份验证,您可以使用

        @if(\Auth::check())
          ....
          ....
        @else
          ....
          ....
        @endif
        

        【讨论】:

        • 我知道这里出了什么问题,@aynber 在 cmets 中提到了。感谢您的回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 1970-01-01
        • 2017-10-08
        • 2016-12-29
        • 2017-06-29
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多