gpt4 book ai didi

ruby-on-rails - 在使用 Rails3 的设计中向密码重置查询添加子域条件?

转载 作者:行者123 更新时间:2023-12-03 19:25:36 29 4
gpt4 key购买 nike

我已将 Devise(在 Rails 3 上)设置为使用 Basecamp 样式的子域身份验证。在这种模式下,一个用户可以使用相同的电子邮件地址在不同的子域下注册两次。

例如:

class User < ActiveRecord::Base
belongs_to :account
end

class Account < ActiveRecord::Base
# subdomain attribute stored here
end

用户 1 在 company1.myapp.com 上注册,电子邮件地址 bob@acme.com
用户 2 在 company2.myapp.com 上注册,电子邮件地址 bob@acme.com

(两个用户帐户都由同一个人控制,但属于不同的子域。)

登录工作正常,但标准密码重置只能通过电子邮件地址查找,因此您只能重置 的密码。用户 1 .我想做的是考虑请求子域,因此从 company2.myapp.com/password/new 重置密码将重置 的密码。用户 2 .

Devise 使用 find_first 方法查找用户,我认为该方法不接受连接,因此我不能包含 :account => {:subodmain => 'comapny2'}健康)状况。

我可以重新实现 send_reset_password_instructions手动查找用户记录,但感觉很麻烦,我需要为 send_confirmation_instructions 执行此操作, 也。

有没有更好的办法?

最佳答案

看起来这可以用 devise_for 配置在路由文件中。

根据我对源代码的阅读(我还没有真正尝试过),您可以添加 reset_password_keys选项。这些应该包括子域。这被传递给 find_or_initialize_with_errors来自 send_reset_password_instructions lib/devise/models/recoverable.rb .在 find_or_initialize_with_errors它是 only these keys which are used to find the resource .

您可能还想覆盖 Devise::PasswordsController#new模板以在用户提交重置密码请求时包含用户的子域。

更新 :解决子域存储在帐户和用户 belongs_to :account 上的事实您可能可以使用 Rails' delegate method .

关于ruby-on-rails - 在使用 Rails3 的设计中向密码重置查询添加子域条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897704/

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