derhansen/fe_change_pwd

一个插件,用于启用前端用户更改密码的功能。包含可配置的密码规则和密码更改强制执行。

支持包维护!
www.paypal.me/derhansen

安装次数: 60,091

依赖关系: 0

建议者: 0

安全性: 1

星星: 6

关注者: 3

分支: 9

开放问题: 2

类型:typo3-cms-extension

5.1.0 2024-07-18 17:11 UTC

README

Tests Code Quality Checks Scrutinizer Code Quality Monthly Downloads Project Status: Active – The project has reached a stable, usable state and is being actively developed.

为前端用户更改密码

它做什么?

此TYPO3扩展包含一个插件,允许已登录的前端用户更改他们的密码。新用户密码将根据前端用户的TYPO3密码策略进行验证。

可以强制执行前端用户的密码更改,并且密码可以在一定天数后过期。

功能

  • 更改密码插件
  • 验证密码是否满足前端用户的TYPO3密码策略
  • 强制前端用户更改密码
  • 在需要更改密码时重定向到配置的页面
  • 密码在可配置天数后过期
  • 可选:在更改密码时要求输入当前密码
  • 可选:在更改密码时要求输入一个密码更改代码,该代码将发送到用户的电子邮件地址

截图

以下截图显示了用户尝试提交一个弱密码后“更改前端用户密码”插件的输出。

Screenshot of the plugin output

安装

  1. 从TYPO3扩展存储库或使用composer安装扩展,并将静态Typoscript“更改前端用户密码”添加到您的Typoscript模板中。

  2. 将“更改前端用户密码”站点设置添加到您的站点

  3. 创建一个新页面,并确保该页面只对已登录的前端用户可见。

  4. 将“更改前端用户密码”插件添加到步骤2中创建的页面

  5. 根据需要更改站点设置。请注意,如果您想使用密码更改强制执行,您必须将fe_change_pwd.changePasswordPid设置为步骤2中创建的页面的页面uid

  6. 根据需要更改Typoscript设置。

  7. 可选:在Typoscript中更改扩展模板的路径并修改模板以满足您的需求。

新的fe_user字段

该扩展向fe_users表添加了两个字段(见截图)

Screenshot of a fe_users

如果选中“用户必须在下次登录时更改密码”复选框,并且已配置有效的changePasswordPid,则在用户以在plugin.tx_fechangepwd.settings.redirect部分配置的方式访问页面时登录后,将重定向到配置的页面。

密码过期日期定义了用户必须更改密码的日期。

提示:如果您想快速让所有前端用户更改他们的密码,您可以使用简单的SQL语句将数据库中的字段设置为以下示例所示:UPDATE fe_users set must_change_password=1;

站点配置设置

  • fe_change_pwd.changePasswordPid (整数) 当需要更改密码时重定向到的pid。这通常是包含扩展插件的页面

  • fe_change_pwd.redirect.allAccessProtectedPages (布尔值) 如果设置为1,则将强制重定向到配置的fe_change_pwd.changePasswordPid的所有受保护页面。请注意,如果设置此选项,则忽略includePageUids

  • fe_change_pwd.redirect.includePageUids (字符串) 将强制重定向到配置的changePasswordPid的配置pid,以逗号分隔

  • fe_change_pwd.redirect.includePageUidsRecursionLevel (整数)fe_change_pwd.redirect.includePageUids 中配置的所有页面的递归级别。如果您想强制将页面及其所有子页面重定向,请使用此选项。

  • fe_change_pwd.redirect.excludePageUids (字符串) 对于用逗号分隔的配置的 PID,将不会强制重定向。

  • fe_change_pwd.redirect.excludePageUidsRecursionLevel (整数)fe_change_pwd.redirect.excludePageUids 中配置的所有页面的递归级别。如果您想排除重定向的页面及其所有子页面,请使用此选项。

TypoScript 配置设置

以下 TypoScript 设置可用。

plugin.tx_fechangepwd.settings.requireCurrentPassword

  • enabled (布尔值) 如果设置为 1,则用户必须输入当前密码才能设置新密码。默认设置为 1

plugin.tx_fechangepwd.settings.requireChangePasswordCode

  • enabled (布尔值) 如果设置为 1,则用户必须输入更改密码代码(该代码将通过电子邮件发送到用户的邮箱),才能设置新密码。默认设置为 0
  • validityInMinutes (整数) 用户请求更改密码代码后,代码有效的分钟数。
  • senderEmail (字符串) 发送至用户的电子邮件地址。
  • senderName (字符串) 发送至用户的电子邮件的发件人姓名。

plugin.tx_fechangepwd.settings.passwordExpiration

  • enabled (布尔值) 如果设置为 1,新密码将在配置的天数后过期。
  • validityInDays (整数) 新密码在需要更改之前有效的天数。

plugin.tx_fechangepwd.settings.afterPasswordChangeAction

  • redirect (字符串) 将用户重定向到 "update" 动作,并添加一条消息,说明密码已更新。
  • view (字符串) 显示更新动作的视图,其中包含一条消息,说明密码已更新。

样式

扩展输出完全未设置样式。您可以根据需要重写 fluid 模板。

重写 Fluid 邮件模板

如果用于 "更改密码代码" 邮件的模板需要被重写,可以在 $GLOBALS['TYPO3_CONF_VARS']['MAIL']['templateRootPaths'][750] 中更改,或者为 ChangePasswordCode 模板添加一个模板重写。

可能的错误

没有密码散列服务

如果无法散列,扩展将不会保存用户的密码。如果发生此情况,将显示以下异常

无法初始化安全的密码散列服务。请检查您的 TYPO3 系统配置

可能的 CSRF 检测到

当扩展检测到可能的 CSRF 时,将显示以下消息

检测到可能的 CSRF。确保提供了有效的 "changeHmac"。

如果您意外看到此消息,请确保按照 "重大更改" 中描述的方式添加 changeHmac 属性。

面向开发者

PSR-14 事件

扩展当前包含以下 PSR-14 事件

  • Derhansen\FeChangePwd\Controller\PasswordController
    • AfterPasswordUpdatedEvent
  • Derhansen\FeChangePwd\Middleware\ForcePasswordChangeRedirect
    • ModifyRedirectUrlParameterEvent

此外,扩展还调度了 TYPO3 核心PSR-14事件 TYPO3\CMS\Core\PasswordPolicy\Event\EnrichPasswordValidationContextDataEvent

如果需要考虑额外的用户数据来验证密码,请使用此事件将数据添加到 ContextData DTO。

版本

重大更改

版本 5.0.0

此版本包含重大的重大更改,必须手动迁移。以下 TypoScript 设置必须迁移到站点设置

  • plugin.tx_fechangepwd.settings.changePasswordPid => fe_change_pwd.changePasswordPid
  • plugin.tx_fechangepwd.settings.redirect.* => fe_change_pwd.redirect.*

此更改是必要的,因为在 PSR-15 MiddleWare 中缓存页面不可用完整的 TypoScript。

此破坏性更改限制了插件只能在每个站点使用一次,如果使用“必须更改密码”或“密码过期日期”功能,这两个功能都需要重定向到单个页面UID,现在已在站点设置中配置。

版本 4.0.0

此版本包含重大破坏性更改,因为现在使用TYPO3密码策略进行密码验证。

  • 已移除所有密码验证器,以支持TYPO3密码策略。请确保TYPO3默认密码策略符合您的需求
  • 已移除pwned密码检查。如果需要此检查,请使用TYPO3扩展add_pwd_policy在密码策略中对前端用户进行设置
  • 扩展现在默认需要当前用户密码。您可以在设置中禁用此检查,使用requireCurrentPassword
  • 扩展需要启用TYPO3 security.usePasswordPolicyForFrontendUsers功能切换
  • 已删除TYPO3 11.5兼容性。

版本 3.0.0

  • 已删除TYPO3 9.5和10.4兼容性。
  • 将TypoScript文件的文件扩展名更改为.typoscript
  • 用PSR-14事件替换了信号槽

版本 2.0.0

已删除TYPO3 8.7兼容性。

版本 1.5.0

添加了CSRF保护。

如果您使用自己的“Edit.html”模板,必须在<f:form>...</f:form>内添加以下代码。

<f:form.hidden property="changeHmac" />

在版本1.5.0之前,如果禁用了settings.requireCurrentPassword(默认),则扩展包含CSRF漏洞。为了缓解问题,已在DTO中添加了changeHmac属性。此属性包含一个HMAC,该HMAC对于当前登录用户是唯一的。当提供的changeHmac不匹配预期值时,提交表单时将抛出异常。

感谢赞助

  • 感谢Wikafi sprl赞助此扩展的初始开发。

  • 感谢t3site.com赞助“要求当前密码”功能。

  • 感谢cron IT GmbH赞助“要求更改密码代码”功能。