gpt4 book ai didi

ruby-on-rails - 强制用户在第一次使用 Devise 登录时重置密码

转载 作者:行者123 更新时间:2023-12-04 16:10:50 33 4
gpt4 key购买 nike

[ETA 在最后更新了我当前的解决方案]

我希望能够为高值(value)用户手动创建帐户,这意味着我们必须为他们生成密码并让他们在第一次登录时更改密码。我找到了解决此问题的方法 here ,但它似乎可以解决设计问题,而不是使用它。

我目前的工作是覆盖 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

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

ETA:我已经使用以下代码成功地跳过了过滤器:
class PasswordsController < Devise::PasswordsController
skip_before_filter :require_no_authentication,
:assert_reset_token_passed,
only: :edit
end

这适用于相关的用户旅程,但这是一个验收测试相对较少的应用程序,所以我有点担心这会在其他地方产生链式 react ——比如在其他一些用户旅程中意外要求用户更改他们的密码。

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

最佳答案

在您的应用程序 Controller 上,覆盖“after_sign_in_path”方法。
使用 sign_in_count 来测试它是否是第一次登录:

def after_sign_in_path_for(resource)
if current_user.sign_in_count == 1
edit_passwords_path
else
root_path
end
end

关于ruby-on-rails - 强制用户在第一次使用 Devise 登录时重置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944917/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com