Laravel - パッケージは、認証機能を認識できないのですか?

レーニアアベニュー:

私は、Webページ上で訪問者をカウントしているパッケージを作りました。現在、私は単純な文字列に非常に多くの他のディスプレイよりをしない単一のルート、コントローラとビューを持っています。私は、このパッケージには、具体的のためにビルドされ、別Laravelアプリケーションを持っています。この別のアプリケーションでは、私は、バックエンドと呼ばれるレイアウトファイルを持っています。

layouts/layouts/backend.blade.php

私のパッケージ図が同じようにこのテンプレートを拡張します(backend.blade.phpがパッケージ内に存在しませんが、のコース別のlaravelアプリケーション内)

@extends('layouts.layouts.backend')

@section('content')
    <div class="container-fluid pt-5 ">
        <div class="row">
            <div class="col-md-6">
                <h3>{{ __('Visitors') }}</h3>
            </div>
        </div>
    </div>
@endsection

パッケージが正常にこのレイアウトを拡張しますが、それは次のような機能を見つけることができないAuth::user()->tokenと、それは言うだろう

Trying to get property 'token' of non-object (View: /Users/rainierlaan/Sites/rainierlaan/resources/views/layouts/layouts/backend.blade.php)

これはなぜ起こるのでしょうか?

これは私のパッケージ・サービス・プロバイダーであります

 public function register()
    {
        // Controllers
        $this->app->make('Rainieren\Visitors\Http\Controllers\VisitorController');
        // Views
        $this->loadViewsFrom(__DIR__.'/resources/views', 'visitors');
        $this->publishes([
            __DIR__.'/resources/views' => resource_path('views/visitors'),
        ]);
        // Migrations
        $this->loadMigrationsFrom(__DIR__.'/database/migrations');
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        include __DIR__ . '/routes/routes.php';
    }

私が行うとvendor:publish表示が正常に右のフォルダに発行していますが、何らかの形のような機能を認識することができないAuth::user()->tokenかをAuth::user()->unreadNotifications->count())

これは私のパッケージのルートであります:

<?php


Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')->name('visitors');

そして、これはコントローラであり、

public function index()
    {
        return view('visitors::index'); 
    }
クリストフ・クルーゲ:

私はもう少しデバッグ情報を必要とするだろうが、私の最初の仮定が欠落しているAuthenticateSessionAuthenticateのミドルウェア。

Laravelはデフォルトのミドルウェア・グループを定義するweb内部のあなたのルートにroutes/web.php、このグループは、使用するAuthenticateSessionミドルウェアを。これは、新規インストールがどのように見えるかです:

Route::group([
    'middleware' => 'web', <<< this is the magic part
    'namespace' => $this->namespace,
], function ($router) {
    require base_path('routes/web.php');
});

ここでは、ミドルウェア・グループがいることがわかりweb使用されています。

カスタムモジュール/サービスプロバイダでは、これはそうではありません。あなたのRoute::get()定義がに追加されRouterなくこのグループ内。そのため、ユーザーを認証するために必要なすべての内部は実行されません。

このシナリオでは、私が使用しようとするだろう->middleware('auth')か、->middleware('web')これは、メイン・プロジェクト・グループのミドルウェアを使用します。

Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')
  ->name('visitors')
  ->middleware('web');

ここでは別の考え方は次のとおりです。

あなたが言うならば、あなたは常に認証されています。そして、あなたはすべてを移動しようとすることができweb、あなたの中に地球ミドルウェアにミドルウェアをKernelprotected $middleware = [])。

私はこれをテストしていませんでしたが、私はこれが同様に仕事ができることを想像することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=9956&siteId=1