Вход в nova и laravel с несколькими пользовательскими моделями

Я использую laravel 5.8 с nova, и мне нужны две пользовательские модели: a_users и b_users. a_users должны иметь возможность войти в приложение laravel, а b_users - в nova.

Разные пользователи не могут находиться в одной таблице базы данных. ‹- Это требование, которое я не контролирую.

В настоящее время у меня есть две отдельные регистрационные формы, которые регистрируют пользователей и добавляют их в соответствующие таблицы. b_users могут войти в приложение nova, а a_users никогда не аутентифицируются (не найдены).

Есть два отдельных контроллера входа в систему (один для nova, один, один для приложений / Http / Controllers / Auth), и я также копался в файле AuthenticatesUsers.

Я не уверен, следует ли мне как-то расширять AuthenticatesUsers или использовать контроллеры, охранники или что-то еще для достижения этой цели.

Я ценю любую помощь, спасибо!


person kyle    schedule 19.07.2019    source источник


Ответы (1)


Я использую приведенные ниже коды, чтобы обойти вашу проблему. Удачного кодирования!

// database\migrations\2019_07_23_075330_create_a_users_table.php
    public function up()
    {
        Schema::create('a_users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

// database\migrations\2019_07_23_075443_create_b_users_table.php
    public function up()
    {
        Schema::create('b_users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

// .env
NOVA_GUARD=loginnova

// config\auth.php
<?php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'a_users',
        ],

        'loginnova' => [
            'driver' => 'session',
            'provider' => 'b_users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'a_users',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'b_users' => [
            'driver' => 'eloquent',
            'model' => App\BUser::class,
        ],

        'a_users' => [
            'driver' => 'eloquent',
            'model' => App\AUser::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ], 

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

// app\Nova\AUser.php
<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class AUser extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

// app\BUser.php
<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class BUser extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

Примечание: я использую аутентификацию по умолчанию для Laravel и форму входа в Nova!

person protoproto    schedule 24.07.2019