authentication - 使用多个用户模型登录 nova 和 laravel
问题描述
我正在使用带有 nova 的 laravel 5.8,并且需要两个用户模型,a_users 和 b_users。a_users 应该能够登录到 laravel 应用程序,b_users 应该能够登录到 nova。
不同的用户不能在同一个数据库表中。<-- 这是我无法控制的要求。
目前,我有两个单独的注册表单,用于注册用户并将它们添加到各自的表中。b_users 能够登录到 nova 应用程序,并且 a_users 永远不会经过身份验证(未找到)。
有两个单独的登录控制器(一个用于 nova,一个用于 App/Http/Controllers/Auth),我也一直在研究 AuthenticatesUsers 文件。
我不确定我是否应该以某种方式扩展 AuthenticatesUsers 或使用控制器、警卫或其他东西来实现这一点。
感谢您的帮助,谢谢!
解决方案
我使用以下代码绕过您的问题。快乐编码!
// 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 的登录表单!
推荐阅读
- c++ - 需要帮助运算符重载,以便我可以显示函数
- python - 在 matplotlib (mpl_finance) 中自定义灯芯和烛台的问题
- json - 难以在反应中显示部分 json 响应
- javascript - 如何在 Plumier 中禁用验证
- html - div col-md-4 内容太大
- java - 从中心位置遍历世界中的 3 维半径
- python - Django Listview 显示 0 个结果
- node.js - 适用于 Windows 和 *nix 的通用 Node.js $INIT_CWD
- csv - 如何通过 .bat 文件运行 .vbs 以将 .xls 转换为 .csv
- c# - 看不到已加载、已初始化、可见的窗口