修改OctoberCMS Laravel插件以禁用表单用户名更改

时间:2017-03-09 07:50:15

标签: php forms laravel laravel-5 octobercms

我正在使用基于OctoberCMSLaravelUsers官方插件。

如何修改此插件以禁用或拒绝用户名更改?

该表单很容易被黑客攻击以允许更改。

插件

以下是我需要编辑的GitHub上的文件:Account.php

onUpdate()函数中,它显示$user->fill,它将保存所有输入字段。

我需要拒绝函数中的username字段或验证器。

public function onUpdate()
{
    if (!$user = $this->user()) {
        return;
    }

    $user->fill(post());
    $user->save();

OctoberCMS

我将Login属性设置为Username。

Login Attribute

用户更新详细信息

用户更新页面显示用户可以更改的表单输入:

全名是数据库中名为surname的一个我不使用的列。
用户名是我使用的列username,但它不包含在默认表单中。

account update

虽然有人可以通过inspect元素在浏览器中添加username字段,但请编辑HTML:

<div class="form-group">
    <label for="accountUsername">Username</label>
    <input name="username" type="text" id="accountUsername" value="Desired Username">
</div>

提交,它将更改名称并更新数据库中的username列。

1 个答案:

答案 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页面代码功能中查看该页面上的事件。