gpt4 book ai didi

php - Laravel 在提交表单而无需输入密码时在数据库中插入随 secret 码

转载 作者:行者123 更新时间:2023-11-29 16:58:09 25 4
gpt4 key购买 nike

当我提交没有密码输入字段的表单时,我想在数据库中插入随 secret 码。

我的模型User.php

protected $fillable = [
'email', 'firstname', 'lastname'
];

public function setpasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value ?: str_random(10));
}

我的 Controller

public function store(Request $request)
{
User::create(Request::all());
return 'test';
}

我的数据库

id
firstname
lastname
password
created_at
updated_at

我的错误

SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value 
(SQL: insert into `users` (`email`, `firstname`, `lastname`, `updated_at`, `created_at`)

最佳答案

SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into users (email, firstname, lastname, updated_at, created_at)

您收到此错误是因为默认的 create_users_table 迁移未向 password 字段提供默认值或允许 null 作为值。

当你打电话时

User::create($request->all()); 

laravel 对数据库执行插入查询,由于未设置密码,MySQL 将返回 `SQLSTATE[HY000]

您可以通过修改新创建的 Laravel 项目默认附带的 create_users_table 迁移来解决这个问题,

  Schema::create('users', function (Blueprint $table) {
// other table columns goes here
$table->string('password')->nullable();
// OR
$table->string('password')->default("");
// other table columns goes here
});

这将允许您创建新用户而无需提供密码,并且该列将设置为“”或留空,具体取决于您用于修改迁移的方法(如我建议的那样)

其次,在模型上定义 setPasswordAttribute 并不意味着当您创建一个没有密码的新用户时,它会自动为其设置密码,您可以通过捕获 creating 将用户插入数据库之前的事件。

为此,请在 EventServiceProvider 中添加此内容

class EventServiceProvider extends ServiceProvider
{

/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
User::creating(function($user){
if($user->password === "" || empty($user->password)){
$user->password = bcrypt(str_random(10));;
}
})

}
}

此事件在用户持久化到数据库之前触发,这将允许您对要持久化到数据库中的用户的所有已设置属性进行一些修改

关于php - Laravel 在提交表单而无需输入密码时在数据库中插入随 secret 码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com