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

Laravel自定义认证:基于注册编号而非邮箱字段实现用户认证

使用注册编号实现Laravel用户认证

嘿,作为Laravel新手想自定义认证字段太正常啦,我来一步步带你搞定用注册编号登录的需求:

1. 自定义LoginController的认证字段

Laravel默认用email做认证标识,咱们只需要在app/Http/Controllers/Auth/LoginController.php里添加一个username()方法,返回你的注册编号字段名就行(假设你的字段叫registration_number):

/**
 * 获取用于用户认证的字段名
 *
 * @return string
 */
public function username()
{
    return 'registration_number';
}

这个方法会告诉Laravel:别用email啦,用我指定的这个字段来匹配用户。

2. 更新登录请求的验证规则

默认的LoginController会用email的验证规则(比如邮箱格式校验),咱们得把这个规则改成适配注册编号的。直接在LoginController里重写validateLogin()方法:

use Illuminate\Http\Request;

/**
 * 验证登录请求的合法性
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $request->validate([
        $this->username() => 'required|string',
        'password' => 'required|string',
    ]);
}

这样就去掉了不必要的邮箱格式校验,只保证注册编号和密码是必填的字符串就行。

3. 修改登录视图的表单

接下来要把登录页面里的email输入框换成注册编号的,找到resources/views/auth/login.blade.php,把原来的email相关代码替换成下面的内容:

<div class="form-group row">
    <label for="registration_number" class="col-md-4 col-form-label text-md-right">{{ __('Registration Number') }}</label>

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

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

别忘把标签文字和输入框的name、id都改成和注册编号字段一致的哦,不然请求没法正确传递字段值。

4. 确保用户表有注册编号字段

最后,你的users数据表必须有registration_number这个字段,而且建议设置成唯一的(避免重复注册)。如果还没加这个字段,先生成迁移文件:

php artisan make:migration add_registration_number_to_users_table

打开生成的迁移文件,修改up()和down()方法:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('registration_number')->unique();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('registration_number');
        });
    }
};

然后运行迁移:

php artisan migrate

小提示

如果你的注册流程也需要用户填写注册编号,记得同步修改RegisterController的验证规则和注册视图,确保注册时能把这个字段正确保存到用户表里哦~

这样操作完,用户就能用注册编号+密码完成登录啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:19:14