首页 > 解决方案 > laravel 5.6 中使用多租户和多模块结构的身份验证问题

问题描述

在 laravel 5.6 中开发我已经安装了这个包,用于在 laravel 5.6 中实现多租户和多模块系统:1. "artem-schander/l5-modular": "^1.4", 2. "hyn/multi-tenant": "5.2.*",

模块化结构是这样的:

laravel-project/`
 app/
 └── Modules/
     └── Organization/
         ├── Controllers/
         │   └── OrganizationController.php
         ├── Models/
         │   └── Organization.php
         ├── Views/
         │   └── index.blade.php
         ├── routes
         │   ├── api.php
         │   └── web.php
         └── helper.php

现在我遇到了一个问题,将身份验证用户详细信息提取到组织模块下的控制器中。

使用组织模块下的路由和默认 laravel 路由 (route/web.php) 它是 laravel 中的默认 web.php。

    Route::group(['middleware' => 'auth'], function () {
    Route::get('dashboard', 'DashboardController@index'); //Return All Users
    //Route::get('dashboard', 'DashboardController@generalDashboard'); //Return All Users
    Route::get('dashboard/{period}', 'DashboardController@renderDashboard'); //Return All Users

    /* Route for Organization*/
    Route::get('organization','\App\Modules\Organization\Controllers\OrganizationController@index'); 

});

组织模块下的路线如下:

    Route::group(['module' => 'Organization', 'middleware' => ['web','auth'], 'namespace' => 'App\Modules\Organization\Controllers'], function() {
    Route::resource('organization', 'OrganizationController');

});

和组织模块下的组织控制器

    namespace App\Modules\Organization\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
//use Illuminate\Support\Facades\Auth;
use Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Mail;

use App\Repositories\Organization\OrganizationRepositoryInterface;

use App\Models\Country;
use App\Models\State;
use App\Models\City;

use Validator;
use Redirect;
use Session;
use App\Http\Requests\OrganizationStoreRequest ;
use App\Traits\Custom\CustomResponseTrait ;

class OrganizationController extends Controller
{
    use CustomResponseTrait ;

    private $organizationRepo ;

    public function __construct(OrganizationRepositoryInterface $organizationRepository){
        $this->organizationRepo = $organizationRepository ;
        //$this->middleware('auth');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function index()
    {
        dd(Auth::user()) ;
        $organizations = $this->organizationRepo->all();
        return view('Organization::test.index')->with('organizations', $organizations);
    }

dd(Auth::user()) ; 它将返回 null ,但 dashboardControiller 在 Laravel 结构的默认 Controller 目录下运行良好。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

use App\Modules\Psession\Models\Psession;
use App\Modules\Product\Models\Product;
use App\Modules\Comment\Models\Comment;
use App\Modules\ProductState\Models\ProductState;
use App\Modules\Image\Models\Image;
use App\Modules\Copywriting\Models\ProductCopywritingsession;
use App\Modules\Ounass\Models\Channel;

use Cache;

class DashboardController extends Controller
{
  /**
  * Create a new controller instance.
  *
  * @return void
  */
  public function __construct(Product $product)
  {
    $this->middleware('auth');
    $this->product = $product;
  }

我应该怎么办?

标签: laravelauthenticationmodular

解决方案


在网络中间件会话开始,所以你还需要添加“网络”中间件

替换下面的行

Route::group(['middleware' => 'auth'], function () {

Route::group(['middleware' => ['web','auth']], function () {

推荐阅读