You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel实现用户/卖家双注册表单(独立数据表需求)

在Laravel中实现独立的普通用户与卖家双表认证注册方案

没问题,我来帮你搞定这个需求——让普通用户和卖家分别用独立的数据表做认证注册,卖家还能收集额外信息。咱们一步步来,每个环节都给你明确的操作:

1. 创建卖家专属数据表

首先,我们要生成卖家表的迁移文件,和默认的users表彻底分开:

php artisan make:migration create_sellers_table

打开生成的迁移文件(在database/migrations目录下),修改up()方法,添加卖家需要的额外字段(比如店铺名称、营业执照号、联系电话,你可以根据自己需求调整):

public function up()
{
    Schema::create('sellers', function (Blueprint $table) {
        $table->id();
        $table->string('name'); // 卖家姓名
        $table->string('email')->unique(); // 邮箱(唯一约束)
        $table->timestamp('email_verified_at')->nullable(); // 邮箱验证时间
        $table->string('password'); // 密码
        $table->string('shop_name'); // 店铺名称(卖家专属字段)
        $table->string('business_license'); // 营业执照号(卖家专属字段)
        $table->string('phone'); // 联系电话(卖家专属字段)
        $table->rememberToken();
        $table->timestamps();
    });
}

执行迁移创建数据表:

php artisan migrate

2. 生成卖家模型并配置认证兼容

接下来创建卖家模型,让它适配Laravel的认证系统:

php artisan make:model Seller

打开app/Models/Seller.php,引入认证相关Trait并配置字段:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Seller extends Authenticatable
{
    use Notifiable;

    // 指定模型对应的数据表(默认就是sellers,写上更清晰)
    protected $table = 'sellers';

    // 允许批量赋值的字段
    protected $fillable = [
        'name', 'email', 'password', 'shop_name', 'business_license', 'phone',
    ];

    // 隐藏敏感字段
    protected $hidden = [
        'password', 'remember_token',
    ];

    // 字段类型转换
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

3. 配置认证守卫与提供者

Laravel靠守卫(Guard)区分不同认证主体,我们要给卖家添加专属守卫:
打开config/auth.php,修改以下两个数组:

  • 在guards数组中添加卖家守卫:
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    // 新增卖家守卫
    'seller' => [
        'driver' => 'session',
        'provider' => 'sellers',
    ],
],
  • 在providers数组中添加卖家提供者:
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    // 新增卖家提供者
    'sellers' => [
        'driver' => 'eloquent',
        'model' => App\Models\Seller::class,
    ],
],

4. 创建卖家注册控制器

给卖家单独做一个注册控制器,复用Laravel自带的注册逻辑:

php artisan make:controller Auth/SellerRegisterController

打开app/Http/Controllers/Auth/SellerRegisterController.php,编写代码:

<?php

namespace App\Http\Controllers\Auth;

use App\Models\Seller;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class SellerRegisterController extends Controller
{
    // 引入注册逻辑Trait
    use RegistersUsers;

    // 卖家注册成功后跳转的页面
    protected $redirectTo = '/seller/dashboard';

    public function __construct()
    {
        // 只允许未登录的卖家访问注册页面
        $this->middleware('guest:seller');
    }

    // 指定使用卖家守卫
    protected function guard()
    {
        return auth()->guard('seller');
    }

    // 显示卖家注册表单
    public function showRegistrationForm()
    {
        return view('auth.seller-register');
    }

    // 卖家注册表单验证规则
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:sellers'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
            'shop_name' => ['required', 'string', 'max:255'],
            'business_license' => ['required', 'string', 'max:255'],
            'phone' => ['required', 'string', 'max:20'],
        ]);
    }

    // 创建卖家记录
    protected function create(array $data)
    {
        return Seller::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'shop_name' => $data['shop_name'],
            'business_license' => $data['business_license'],
            'phone' => $data['phone'],
        ]);
    }
}

5. 创建卖家注册视图

复制默认注册视图,改成卖家专属表单:

  1. 复制resources/views/auth/register.blade.php,重命名为seller-register.blade.php
  2. 修改表单提交路由:
<form method="POST" action="{{ route('seller.register') }}">
  1. 添加卖家专属字段,示例:
<div class="form-group row">
    <label for="shop_name" class="col-md-4 col-form-label text-md-right">{{ __('Shop Name') }}</label>

    <div class="col-md-6">
        <input id="shop_name" type="text" class="form-control @error('shop_name') is-invalid @enderror" name="shop_name" value="{{ old('shop_name') }}" required autocomplete="shop_name" autofocus>

        @error('shop_name')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>

按这个格式添加所有你需要的卖家专属字段。

6. 配置卖家认证路由

在routes/web.php中添加卖家注册(以及可选的登录)路由:

// 普通用户默认认证路由(你之前用`php artisan make:auth`生成的)
Auth::routes();

// 卖家注册路由
Route::get('/seller/register', [App\Http\Controllers\Auth\SellerRegisterController::class, 'showRegistrationForm'])->name('seller.register');
Route::post('/seller/register', [App\Http\Controllers\Auth\SellerRegisterController::class, 'register']);

// (可选)卖家登录/登出路由,如果需要独立登录入口
Route::get('/seller/login', [App\Http\Controllers\Auth\SellerLoginController::class, 'showLoginForm'])->name('seller.login');
Route::post('/seller/login', [App\Http\Controllers\Auth\SellerLoginController::class, 'login']);
Route::post('/seller/logout', [App\Http\Controllers\Auth\SellerLoginController::class, 'logout'])->name('seller.logout');

如果需要卖家登录功能,创建SellerLoginController的逻辑和注册控制器类似,只要继承LoginController并指定guard为seller即可。

最后测试

现在你可以访问/seller/register测试卖家注册流程,普通用户注册还是用默认的/register,两者完全独立,数据分别存在users和sellers表里,完美满足你的需求!

内容的提问来源于stack exchange,提问作者BraDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:37:52