修改 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 页面代码函数内仅收听该页面上的事件。