【问题标题】:Modify OctoberCMS Laravel Plugin to Disable Form Username Change修改 OctoberCMS Laravel 插件以禁用表单用户名更改
【发布时间】:2017-07-30 02:22:22
【问题描述】:

我正在使用基于LaravelOctoberCMS 和官方Users 插件。

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

表单很容易被黑客入侵以进行更改。

插件

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

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

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

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

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

十月CMS

我将登录属性设置为用户名。

用户更新详情

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

Full Name 是数据库中名为 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 列。

【问题讨论】:

    标签: php forms laravel laravel-5 octobercms


    【解决方案1】:

    您可以使用以下方式扩展 User 模型:

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

    【讨论】:

    • 我应该把这段代码放在哪里,在 Account.php 或 User.php 模型的顶部?我相信用户插件仅限于前端,所以后端不会受到影响。
    • 我能够让它工作并将其用于更多功能,谢谢。
    • @MattMcManis 如果您需要全局影响,请在您的插件之一的 boot 方法中定义它,否则如 Samuel 所说,将其放入您页面的 onInit 方法中。
    • @Meysam 我对这个问题有一个补充,你能看一下吗? stackoverflow.com/q/42721364/6806643
    猜你喜欢
    • 2017-08-18
    • 2017-04-05
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2017-11-10
    • 2019-04-20
    • 2016-04-12
    • 2020-03-23
    相关资源
    最近更新 更多