强制用户在首次使用 Devise 登录时重置密码

2024-03-06

[预计到达时间最后更新为我当前的解决方案]

我希望能够为高价值用户手动创建帐户,这意味着我们必须为他们生成密码并让他们在首次登录时更改密码。我找到了执行此操作的解决方案here https://stackoverflow.com/questions/32395442/devise-after-first-login-should-ask-for-change-password,但它似乎是围绕 Devise 工作,而不是与它一起工作。

我当前的工作是覆盖 Devise ConfirmationsController 中的 #after_confirmation_path_for 方法,以便它包含以下代码片段:

if resource.sign_in_count == 1
  resource.send(:set_reset_password_token)
  edit_password_path(resource, reset_password_token: @token)
else
  # etc
end

但是当它遵循该路径时,它会重定向远离密码更改,这似乎是因为 Devise::PasswordsController 中的这一行:

# Render the #edit only if coming from a reset password email link
append_before_filter :assert_reset_token_passed, only: :edit

所以我可以覆盖那个调用,但我很担心它为什么在那里,以及这是否会导致其他问题 - 即使不会,感觉就像我正在做很多黑客工作来实现我想要的场景想象中是比较常见的。有没有一种更 Devise-y 的方法来解决这个问题?

ETA:我已经使用以下代码成功跳过了过滤器:

class PasswordsController < Devise::PasswordsController
  skip_before_filter :require_no_authentication,
                     :assert_reset_token_passed, 
                     only: :edit
end

这在相关的用户旅程中有效,但这是一个验收测试相对较少的应用程序,因此我有点担心这会在其他地方产生连锁反应 - 比如意外地要求用户在其他用户旅程中更改密码。

任何人都可以建议使用这种方法是否正常,或者是否有更安全的替代方法?


我通过在重定向之前注销用户解决了这个问题,这样 Devise 就可以安心地做它的事情了。无需其他修改:

token = current_user.send(:set_reset_password_token)
sign_out(current_user)
redirect_to(edit_password_path(:user, reset_password_token: token))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制用户在首次使用 Devise 登录时重置密码 的相关文章

随机推荐

  • 交换行和列

    我需要一个 MATLAB 函数 它将在矩阵中相互交换 2 行或 2 列 任意大小 假设你采用矩阵 gt gt A magic 4 A 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 如果你想交换第 3 列和第
  • 如何共享 git 配置?

    我已经使用启动了一个新的 git 存储库git flow 完成一两次提交并推送 当我将存储库克隆到新目录并运行git flow命令我收到错误 Fatal Not a gitflow enabled repo yet Please run g
  • 在 Android-x86 上网本上使用 ADB 通过蓝牙调试应用程序

    我设法在我的上网本上设置了一个运行良好的 Android x86 启用了蓝牙并与我的 Windows 7 开发工作站配对 我最初希望通过 USB 使用 adb 就像我使用真正的手机一样 所以我插入了专用的 USB 公对公电缆 然后 什么也没
  • python 中的 IOError 22 在 windows 上无效

    我正在 python 中创建串口嗅探器 但是当我在 Windows 中创建 CSV 文件时遇到问题 我在某个点上分割了我的程序以避免Windows和Linux之间不兼容的可能性 它在 Linux 上完美运行 在 32 和 64 字节上测试
  • 当应用商店中有新版本时,通过代码检查和更新应用程序

    在我的应用程序中 我想检查应用程序商店中是否有我的应用程序的任何更新版本 如果有的话 那么必须通过警报消息通知用户 如果他 她选择升级 我想更新新版本 我想通过我的应用程序完成这一切 这可能吗 您可以在服务器上存储最新的应用程序版本字符串
  • 在 JUnit 5 中为 @ParameterizedTest 生成显示名称

    我有一堆 ParameterizedTests 从 a 接收参数 MethodSource相当冗长toString 结果 例如 Selenium 的WebDriver 默认情况下使用它们来组成相应的显示名称 来自JUnit 5 用户指南 h
  • 如何使用 Laravel 和 Eloquent 查询两个日期?

    我正在尝试创建一个报告页面 显示从特定日期到特定日期的报告 这是我当前的代码 now date Y m d reservations Reservation where reservation from now gt get 这在普通 SQ
  • 如何在 Django 1.7 的表单模型中获取当前登录的用户 ID?

    假设我有一个显示歌曲的网页 假设有公共歌曲和私人歌曲 公开歌曲是所有人都可以看到的 而私人歌曲是某个用户自己创建的 只有他自己可以看到的歌曲 所以用户应该只看到那些具有owner id NULL和owner id current logge
  • Ruby:将变量合并到字符串中

    我正在寻找一种更好的方法 在 Ruby 中将变量合并到字符串中 例如 如果字符串类似于 The animal action the second animal 我有变量animal action and second animal 将这些变
  • Tensorflow 基本示例错误:CUBLAS_STATUS_NOT_INITIALIZED

    您好 我正在尝试安装并运行tensorflow 1 0 我正在使用以下指南https www tensorflow org get started mnist beginners https www tensorflow org get s
  • 缺少“访问控制允许来源”。我的下一步应该是什么?

    我想从这里提取收益率曲线数据 下面的 get 请求返回 200 正常 状态代码 但也显示一条控制台注释 指出跨域请求被阻止 因为缺少 CORS 标头 Access Control Allow Origin get http www trea
  • 如何从 PHP 中的 json_decode 访问嵌套数组?

    我花了几个小时在这上面 并且在 stackoverflow 上阅读了很多答案 但没有一个有帮助 到目前为止我所能做的就是打印集市广场 克利夫登对于这个例子 obj json decode data obj obj 0 print obj g
  • 如何使用 python 的 PIL 以一定角度绘制文本?

    使用 Python 我希望能够使用 PIL 以不同角度绘制文本 例如 假设您正在钟面周围绘制数字 号码3会按预期出现 而12我们将逆时针旋转 90 度来绘制 因此 我需要能够从许多不同的角度绘制许多不同的弦 将文本绘制到临时空白图像中 旋转
  • 不同进程的内存地址相同

    我只是不明白为什么这段代码会这样工作 而不是我期望的 include
  • LINQ 与 FoxPro?

    有没有合理的方法使用 LINQ 访问 FoxPro 数据库 我刚刚完成实施工作 http linqtovfp codeplex com http linqtovfp codeplex com
  • Android:事件 ACTION_POWER_CONNECTED 未发送到我的 BroadcastReceiver

    我想在手机插入充电器后做一些事情 所以我 已创建ChargingOnReciever public class ChargingOnReceiver extends BroadcastReceiver public void onRecei
  • Flash 消息无法正常工作express/nodejs/ejs

    闪存消息似乎不起作用 我想我错过了一些非常明显的东西 但我已经研究了一个小时 但我仍然不知道为什么它不起作用 我的中间件 Session middleware app use session secret stuffedbagels res
  • 通过嵌套 tf.map_fn 反向传播梯度

    我想在每个向量上映射一个 TensorFlow 函数 该向量对应于具有维度的矩阵中每个像素的深度通道 批量大小 H W n 通道 换句话说 对于每个尺寸的图像H x W我在批次中拥有 我提取一些特征图F k 其数量为n channels 具
  • 无法在主线程上启动处理程序

    我正在开发 jar api 以从 Unity3D 读取 Google Fit 数据 我现在面临的问题是 当我想执行这段代码时 private void buildFitnessClient mClient new GoogleApiClie
  • 强制用户在首次使用 Devise 登录时重置密码

    预计到达时间最后更新为我当前的解决方案 我希望能够为高价值用户手动创建帐户 这意味着我们必须为他们生成密码并让他们在首次登录时更改密码 我找到了执行此操作的解决方案here https stackoverflow com questions