php - Laravel - 包无法识别身份验证功能?

标签 php laravel laravel-5 package

我制作了一个包,用于计算网页上的访问者。目前我有一个单一的路线、 Controller 和 View ,除了显示一个简单的字符串之外,它们并没有做太多的事情。我有一个单独的 Laravel 应用程序,这个包是专门为它构建的。在这个单独的应用程序中,我有一个名为 backend 的布局文件。
layouts/layouts/backend.blade.php .

我的包 View 正在扩展这个模板,如下所示:(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 View 成功发布到正确的文件夹,但不知何故无法识别 Auth::user()->token 等功能或 Auth::user()->unreadNotifications->count())
这是我的包裹路线:
<?php


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


这是 Controller
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')它将使用 main-projects 组中间件。
Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')
  ->name('visitors')
  ->middleware('web');

这是一个不同的想法:

如果你说你总是经过身份验证。然后你可以尝试移动所有web中间件进入您的Kernel 中的全局中间件(protected $middleware = [])。

我没有对此进行测试,但我可以想象这也可以。

关于php - Laravel - 包无法识别身份验证功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60283127/

相关文章:

php - 没有数据库的 Laravel 模型

php - 将 Doctrine native 查询映射到无实体模型类

php - 身份验证后始终重定向到根路径 [laravel]

javascript - 价格 slider 事件发生时如何检查复选框是否被选中

php - 如何覆盖/添加到 Laravel 中的密码代理?

php - 解析一个字符串然后发布

php - ob_start echo 的字符串仍然输出

laravel - 将 Eloquent 模型限制为特定列

php - 如何匹配正则表达式中的反斜杠

php - 如何使用 laravel 向 sqs 发送 json 消息?