在Laravel 5.2视图中使用Auth:User()进行导航

时间:2016-01-19 14:59:32

标签: php laravel authentication laravel-5 laravel-5.2

我有一个索引路径“/”,它加载了扩展master的index.blade.php。我无法在导航栏中使用Auth :: User(),导航栏是主要部分包含的。它适用于需要身份验证的页面。我有登录和注册按钮,通过/ login和/ register链接AuthController,并且当经过身份验证的用户正在查看“/”索引页面或不需要身份验证的任何其他页面时,希望这些按钮被Logout替换。

当用户登录时,会重定向正确运行的/仪表板路径并且导航栏显示正确,但当他们查看主页时,登录和注册按钮在导航中并单击它们只是将它们重定向回“/”索引路由,而不显示登录或注册表单。 (因为他们已经登录了我假设。)再次获取表单的唯一方法是在地址栏中手动输入/注销。

我一直在尝试查找各地的答案,但无法弄明白。

Route::get('/','PagesController@index'); Route::group(['middleware' => ['web']], function () { // Route::controllers([ 'register' => 'Auth\AuthController', 'password' => 'Auth\PasswordController', ]); }); 在控制器中返回null。 我已经看到了很多类似的问题,但是与旧版本的Laravel有关,但解决方案似乎没有用,或者我只是没有正确应用它们。

感谢您的帮助!

route.php

class PagesController extends Controller
{
    //

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //

    }

    public function index()
    {

        $nav_active = 'home';

        return view('pages.index',compact('nav_active'));

PagesController.php

<ul class="nav navbar-nav navbar-right">
      @if (Auth::guest())
        <li><a href="{{ url('/login') }}">Login</a></li>
        <li><a href="{{ url('/register') }}">Register</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="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
            </ul>
        </li>
     @endif
</ul>

app.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    ...
    </div>
</div>
@stop

页/ index.blade.app

{{1}}

3 个答案:

答案 0 :(得分:1)

将所有内容放在web中间件中。 web中间件由处理会话的其他中间件组成。没有会话=没有用户。

例如,其中一个名为Illuminate\Session\Middleware\StartSession,负责启动会话。

我不确定您为什么决定将该特定路线放在web组之外,但如果没有它,您将无法拥有用户。如果您打算做其他事情,例如构建API,则应该只将路由放在组外。

答案 1 :(得分:0)

你的dd()中的Auth :: user()之前有一个反斜杠。您也可以在app.blade.php中用Auth :: check()替换Auth :: guest()吗?

答案 2 :(得分:0)

我有类似的问题。在配置我的导航栏中:

@if(Auth::guest())
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
     <i class="fa fa-user"></i> <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
      <li><a href="{{ url('/login') }}">Login</a></li>
      <li><a href="{{ url('/register') }}">Sign Up</a></li>
    </ul>
  </li>
@else
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
     <i class="fa fa-user"></i> {{ Auth::user()->name }}
                               <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
      <li><a href="{{ url('/logout') }}">Logout</a></li>
    </ul>
 </li>            
@endif

但是当我登录时,这个导航栏会给我错误:

AliasLoader.php第63行中的

FatalErrorException: 已达到最大功能嵌套级别'100',正在中止!

要解析此输入 bootstrap / autoload.php 并在文件末尾添加以下行:

ini_set('xdebug.max_nesting_level', 120);