Laravel 8 Jetstream:向注册流程添加新字段

11

我开始使用Laravel 8构建Web应用程序。我注意到Laravel 8中有很多东西都发生了变化,包括身份验证。现在,我正在尝试使用Jetstream进行身份验证。

我运行了以下命令将其集成到应用程序中。

composer require laravel/jetstream
php artisan jetstream:install inertia
npm install && npm run dev
当我访问/register路径时,我可以看到包含名称、电子邮件、密码以及密码确认字段的注册表单。我想要做的是添加另一个名为“公司”的字段,并对其应用自定义验证规则。我在Jetstream文档中发现,我可以在JetstreamServiceProvider类的boot方法中自定义身份验证过程。
Fortify::authenticateUsing(function (Request $request) {
            
        });

但它不适用于注册。我如何定制注册过程以添加新字段并应用自定义验证规则?

但是这不适用于注册。如何自定义注册流程以添加新字段并应用自定义验证规则?

返回结果:

但是这不适用于注册。如何自定义注册流程以添加新字段并应用自定义验证规则?

3个回答

24
首先,您应该使用位于 database\migrations\2014_10_12_000000_create_users_table.php中的迁移,在用户表中添加company字段。
public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('company');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->foreignId('current_team_id')->nullable();
            $table->text('profile_photo_path')->nullable();
            $table->timestamps();
        });
    }

然后运行以下命令php artisan migrate:fresh来迁移您的新用户表。

然后在\app\Models\User.php中找到User模型,并将该字段添加到可填充数组中,如下所示:

protected $fillable = [
    'name',
    'company',
    'email',
    'password',
];

现在你可以在resources\views\auth\register.blade.php中找到注册视图,然后复制一个输入块用于'company'字段。

然后你可以在app\Actions\Fortify\CreateNewUser.php类中进行验证。

public function create(array $input)
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'company' => ['required', 'string', 'max:255'],
            'password' => $this->passwordRules(),
        ])->validate();

        return User::create([
            'name' => $input['name'],
            'email' => $input['email'],
            'company' => $input['company'],
            'password' => Hash::make($input['password']),
        ]);
    }

那么,你已经准备好了。


1
干得好,阿里。这就是我要找的东西。 - Wai Yan Hein
命令 php artisan migrate:fresh 在生产环境下会给你一个警告。这是因为在运行此命令后,你的数据库表中的数据将会丢失。 - Arif I.
@ArifI。是的,我的回答仅适用于新创建的项目,因为上面提到了这个问题。在生产环境中,我们应该更新现有的表而不是删除它。 - Ali Ali
哇塞,找Fortify文件找得我都快疯了...它们就在新文件夹Actions里。谢谢! - Erich García
对于自定义输入(如选择框)添加样式,您可以添加以下内容:border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm w-full - Meysam Zarei

4

@Ali的回答是正确的,但是对于那些使用Inertia的人来说还需要一个额外的步骤。您需要打开resources/js/Pages/Auth/Register.vue并将所需字段添加到表单中。此外,向下滚动文件底部并将字段名称添加到this.$inertia.form输入参数对象文字中。例如,如果所需的附加字段名称为company,则应像这样添加:

data() {
  return {
    form: this.$inertia.form({
      name: '',
      company: '', // <- New line here
      email: '',
      password: '',
      password_confirmation: '',
      terms: false,
    })
  }
},

0
嗯,这些答案正确吗?如果您安装了LiveWire,那么您可以编辑resources/views/auth/register.blade.php,但是使用Inertia和Vue时,没有这样的文件夹或文件(至少在当前版本中)。实际上,默认情况下resources/views文件夹中只有一个文件:app.blade.php。如果我理解正确,严格的Inertia使用不使用blade文件。 我是正确的吗? 如果是这样,那么问题就没有得到回答。在使用Inertia时,您应该在哪里添加新字段?在我的情况下,使用Spatie/permissions,如何创建引用角色信息的逻辑?

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接