修改 OctoberCMS Laravel 插件以禁用表单用户名更改
Modify OctoberCMS Laravel Plugin to Disable Form Username Change
我正在使用 OctoberCMS based on Laravel with the official Users 插件。
如何修改此插件以禁用或拒绝用户名更改?
表单很容易被破解以允许更改。
插件
这是 GitHub 上的文件,我需要编辑:Account.php
在 onUpdate()
函数中,它显示 $user->fill
,它正在保存所有输入字段。
我需要在函数中或使用验证器拒绝 username
字段。
public function onUpdate()
{
if (!$user = $this->user()) {
return;
}
$user->fill(post());
$user->save();
十月内容管理系统
我将登录属性设置为用户名。
用户更新详情
用户更新页面显示用户可以更改的表单输入:
全名 是数据库中我不使用的名为 surname
的列。
用户名是我使用的username
列,但它不包含在默认表单中。
虽然有人可以通过检查元素在浏览器中添加 username
字段,但编辑 HTML:
<div class="form-group">
<label for="accountUsername">Username</label>
<input name="username" type="text" id="accountUsername" value="Desired Username">
</div>
提交,它将更改名称并更新数据库中的 username
列。
你可以用这样的东西扩展用户模型:
\RainLab\User\Models\User::extend(function($model) {
$model->bindEvent('model.beforeUpdate', function() use ($model) {
if ($model->isDirty('username')) {
throw new \ValidationException(['username' => 'Sorry!...']);
}
});
});
如果在注册方法中定义上述代码,将产生全局影响,防止用户名被更改。要仅将其限制在前端,请考虑使用像 if (!App::runningInBackend()) { /* ... */ }
这样的表达式。否则,您可以仅在 onInit
页面代码函数内仅收听该页面上的事件。
我正在使用 OctoberCMS based on Laravel with the official Users 插件。
如何修改此插件以禁用或拒绝用户名更改?
表单很容易被破解以允许更改。
插件
这是 GitHub 上的文件,我需要编辑:Account.php
在 onUpdate()
函数中,它显示 $user->fill
,它正在保存所有输入字段。
我需要在函数中或使用验证器拒绝 username
字段。
public function onUpdate()
{
if (!$user = $this->user()) {
return;
}
$user->fill(post());
$user->save();
十月内容管理系统
我将登录属性设置为用户名。
用户更新详情
用户更新页面显示用户可以更改的表单输入:
全名 是数据库中我不使用的名为 surname
的列。
用户名是我使用的username
列,但它不包含在默认表单中。
虽然有人可以通过检查元素在浏览器中添加 username
字段,但编辑 HTML:
<div class="form-group">
<label for="accountUsername">Username</label>
<input name="username" type="text" id="accountUsername" value="Desired Username">
</div>
提交,它将更改名称并更新数据库中的 username
列。
你可以用这样的东西扩展用户模型:
\RainLab\User\Models\User::extend(function($model) {
$model->bindEvent('model.beforeUpdate', function() use ($model) {
if ($model->isDirty('username')) {
throw new \ValidationException(['username' => 'Sorry!...']);
}
});
});
如果在注册方法中定义上述代码,将产生全局影响,防止用户名被更改。要仅将其限制在前端,请考虑使用像 if (!App::runningInBackend()) { /* ... */ }
这样的表达式。否则,您可以仅在 onInit
页面代码函数内仅收听该页面上的事件。