我正在使用基于OctoberCMS的Laravel和Users官方插件。
如何修改此插件以禁用或拒绝用户名更改?
该表单很容易被黑客攻击以允许更改。
以下是我需要编辑的GitHub上的文件:Account.php
在onUpdate()
函数中,它显示$user->fill
,它将保存所有输入字段。
我需要拒绝函数中的username
字段或验证器。
public function onUpdate()
{
if (!$user = $this->user()) {
return;
}
$user->fill(post());
$user->save();
我将Login属性设置为Username。
用户更新页面显示用户可以更改的表单输入:
全名是数据库中名为surname
的一个我不使用的列。
用户名是我使用的列username
,但它不包含在默认表单中。
虽然有人可以通过inspect元素在浏览器中添加username
字段,但请编辑HTML:
<div class="form-group">
<label for="accountUsername">Username</label>
<input name="username" type="text" id="accountUsername" value="Desired Username">
</div>
提交,它将更改名称并更新数据库中的username
列。
答案 0 :(得分:1)
您可以使用以下内容扩展用户模型:
\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
页面代码功能中查看该页面上的事件。