Laravel 10注册Artist与Client时提示users表不存在的问题求助
解决多用户类型注册时"users表不存在"的问题
核心问题
错误提示在查询users表的唯一性,说明代码中仍有逻辑依赖默认的users表,以下是针对性修复步骤:
1. 修正验证器的唯一性规则
你的validator方法大概率沿用了默认的unique:users规则,需要替换为对应表名:
protected function validator(array $data) { return Validator::make($data, [ 'username' => ['required', 'string', 'max:255', 'unique:artists'], // 改为artists表 // 其他字段验证规则... ]); }
Client的验证器同理,将unique:artists替换为unique:clients。
2. 配置Auth守卫与用户提供者
修改config/auth.php,添加artist和client的守卫及对应提供者:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], // 新增artist守卫 'artist' => [ 'driver' => 'jwt', 'provider' => 'artists', ], // 新增client守卫 'client' => [ 'driver' => 'jwt', 'provider' => 'clients', ], ], 'providers' => [ // 不需要可删除默认users配置 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 新增artists提供者 'artists' => [ 'driver' => 'eloquent', 'model' => App\Models\Artist::class, ], // 新增clients提供者 'clients' => [ 'driver' => 'eloquent', 'model' => App\Models\Client::class, ], ],
3. 确保模型正确指定表名并实现JWT接口
Artist和Client模型需要明确指定表名,并且实现JWTSubject接口:
namespace App\Models; use Illuminate\Database\Eloquent\Model; use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject; class Artist extends Model implements JWTSubject { // 指定对应的数据表 protected $table = 'artists'; // 允许批量赋值的字段 protected $fillable = ['username', 'password', /* 其他字段 */]; // 实现JWTSubject接口的方法 public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }
Client模型做同样修改,将$table设为clients。
4. 调用JWTAuth时指定守卫
生成token时需要指定对应守卫,避免使用默认的users守卫:
// 原代码 $token = JWTAuth::fromUser($artist); // 修改为 $token = JWTAuth::guard('artist')->fromUser($artist);
Client注册时改为JWTAuth::guard('client')->fromUser($client);
5. 检查createArtist方法
确保createArtist方法创建的是Artist模型实例,而非默认的User:
protected function createArtist(array $data) { return App\Models\Artist::create([ 'username' => $data['username'], 'password' => Hash::make($data['password']), // 其他字段... ]); }
完成以上步骤后,重新清除缓存并测试:
php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者strandom
相关产品推荐
相关产品推荐

