草庐IT

php - Silverstripe:ConfirmedPasswordField 不保存新密码

coder 2024-04-19 原文

我试图让用户在前端更新他们的密码。除此字段外,所有其他字段都会更新。我正在使用 Silverstripe 版本 3.4.0。这可能不是处理此问题的最佳方法:

// Edit & Save your details
public function EditMyDetails() {
    //Include JS for updating details
    Requirements::javascript('module-memberprofiles/javascript/MemberProfileUpdate.js');
    Requirements::set_force_js_to_bottom(true);

    $fields = new FieldList(
        $leftCol = CompositeField::create(
            TextField::create('FirstName', 'First Name')
                ->setFieldHolderTemplate('UserDetails_FieldHolder'),
            TextField::create('Surname', 'Surname')
                ->setFieldHolderTemplate('UserDetails_FieldHolder'),
            CompositeField::create(
                TextField::create('Address', ''),
                TextField::create('Suburb', ''),
                CompositeField::create(
                    DropdownField::create('State', '', singleton('Member')->dbObject('State')->enumValues())->setFieldHolderTemplate('UserDetails_StatePostCode'),
                    TextField::create('PostCode', '')->setFieldHolderTemplate('UserDetails_StatePostCode')
                )->addExtraClass('row')
            )
                ->addExtraClass('userdetails-address wrap')
                ->setFieldHolderTemplate('UserDetails_AddressHolder'),
            TextField::create('Phone', 'Phone')
                ->setFieldHolderTemplate('UserDetails_FieldHolder'),
            TextField::create('Email', 'Email')
                ->setFieldHolderTemplate('UserDetails_FieldHolder')
        )->setFieldHolderTemplate('UserDetails_CompositeField'),
        $rightCol = CompositeField::create(
            ConfirmedPasswordField::create('Password', 'Change Password', null, null, $showOnClick = true)
        )->setFieldHolderTemplate('UserDetails_CompositeField')
    );

    $actions = new FieldList(new FormAction('SaveMyDetails', 'Save Profile'));
    
    $validation = new RequiredFields(array('FirstName','Surname','Email'));

    $form = new Form ( $this, 'EditUserDetails', $fields, $actions, $validation);
    $form->loadDataFrom(Member::currentUser());
    $form->setTemplate('MemberProfilePage_UserDetailsForm');

    return $form;
}

public function SaveMyDetails($data, $form) {
    $table = Member::currentUser();
    $members = Member::get();
    $emailExists = $members->filter(array(
        'Email' => $data['Email'],
        'ID:not' => $table->ID
    ));

    if( $emailExists->count() > 0 ) {
        $form->sessionMessage('Sorry, that email address already exists. Please try again','bad');
        return $this->redirectBack();
    } else {
        $form->sessionMessage('Your details have been updated.','good');
    }

    $form->saveInto($table);
    $table->write();
    $this->redirectBack();

    return $this;
}

最佳答案

与任何其他优秀的 CMS 一样,出于安全原因,SilverStripe 不会在数据库中以纯文本形式存储密码。密码需要经过哈希处理,不能直接设置。

这就是为什么您对 $form->saveInto($table); 的调用不会触及密码。

SilverStripe 成员类有一个 changePassword()您可以调用更新密码的方法。在将表单数据保存到 Member 对象后立即调用它:

$form->saveInto($table);
$table->changePassword($data['Password']['_Password']);
$table->write();

我还没有测试过这个代码片段,但我很确定它会起作用。

关于相关主题,您可能希望查看 Member Profile插件。

希望这对您有所帮助。

关于php - Silverstripe:ConfirmedPasswordField 不保存新密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39091176/

有关php - Silverstripe:ConfirmedPasswordField 不保存新密码的更多相关文章

  1. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  2. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  3. ruby-on-rails - Rails 3.2 防止使用错误保存对象 - 2

    我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中

  4. ruby-on-rails - 将保存回调添加到单个 ActiveRecord 实例,可以吗? - 2

    是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立

  5. ruby - 正则表达式 - 保存重复捕获的组 - 2

    这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","

  6. ruby-on-rails - ActiveRecord:除非另有说明,否则在保存之前使所有文本字段都调用 strip - 2

    多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor

  7. ruby-on-rails - 如何用 has_many 保存数据 :through - 2

    我在游戏和帐户模型之间存在多对多关系,如下所示:classAccount:destroyhas_many:games,:through=>:account_gamesendclassGame:destroyhas_many:accounts,:through=>:account_gamesendclassAccountGame现在我知道让我们说我想创建一个类似这样的记录:@account=Account.new(params[:user])@account.games但是我应该如何在执行此操作时更新AccountGame中的某些属性?假设AccountGame有一些名为score的字段

  8. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  9. ruby - 在 tensorflow.rb 上运行保存的模型 - 2

    我使用高级EstimatorAPI(DNNClassifier)在Python中构建并保存了一个非常简单的模型。它需要2个float并输出两个类之一。我正在尝试使用tensorflow.rbgem在Ruby中加载它,并用它做出预测。这应该很相似totheCAPTCHAexampleprovidedbytensorflow.rb.我使用export_saved_model保存了它。这是训练模型的Python代码。它可以正确地预测类别。将numpy导入为np将Pandas导入为pd将tensorflow导入为tfdataframe=pd.read_csv("remediations_imp

  10. css - 检测到 Sass 更改但 style.css 仅在我保存时每 5 到 7 次被覆盖 - 2

    我在一台Windows764位机器上使用Sass和Ruby(最新版本),我正在我的家庭服务器上处理一个共享文件夹。(但是,我不得不承认问题本身也出现在服务器上,因为我试图安装Ruby并直接-watch服务器上的文件)。问题如下:如果我第一次保存,检测到变化,我的style.css被直接覆盖。之后,我总是需要保存多达7次才能覆盖style.css。每次都会检测到更改,但不会编译任何内容。这是一个屏幕:>>>Sassiswatchingforchanges.PressCtrl-Ctostop.overwritestyle.css>>>Changedetectedto:E:/Websites

随机推荐