gpt4 book ai didi

ruby-on-rails-3 - 设计 - 在用户编辑电子邮件后确认

转载 作者:行者123 更新时间:2023-12-03 22:24:15 26 4
gpt4 key购买 nike

我一直试图解决这个问题 2 天。我正在通过电子邮件确认(通过设计)确认用户帐户。我终于完成了所有这些工作,但重点是验证一个人是否拥有他们声称拥有的电子邮件。因此,每当用户更改电子邮件时,我都需要再次确认。

为了做到这一点,我创建了 registrations_controller并已覆盖 update方法。主要基于 Devise 拥有的内容,但我检查是否需要根据更新发送确认。

# registrations_controller.rb
def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)

send_confirmation = false
if params[:user][:email] != resource.email
send_confirmation = true
end

if resource.update_with_password(params[resource_name])
set_flash_message :notice, :updated if is_navigational_format?
sign_in resource_name, resource, :bypass => true

if send_confirmation
resource.update_attributes(:confirmed_at => nil, :confirmation_sent_at => nil)
resource.send_confirmation_instructions
end

respond_with resource, :location => after_update_path_for(resource)
else
clean_up_passwords(resource)
respond_with_navigational(resource){ render_with_scope :edit }
end
end

我的问题是我不确定在这个过程中的什么地方能够改变它被重定向到的地方。我有一个页面说明“已发送电子邮件以确认您的电子邮件”。但是如果我试着把它放在 send_confirmation_instructions 之后当用户单击“更新帐户”时,他们将被注销(推送到登录屏幕),然后当他们通过电子邮件确认帐户时,他们将被定向到我想向他们展示的页面。

我有一个自定义的 Warden 策略,其中包含一些内容,并且我还重写了 Devise 放入的 before 过滤器:
# registrations_controller.rb
def authenticate_scope!
puts "RegistrationsController :: authenticate_scope!"
puts "action : #{params[:action]}"

super
end

所以看起来它正在尝试对用户进行身份验证。日志内容如下:
...
Redirected to http://localhost:3000/users/edit
Completed 302 Found in 3537ms
RegistrationsController :: authenticate_scope!
action : edit


Started GET "/users/edit" for 127.0.0.1 at 2011-06-08 11:42:09 -0500
Processing by RegistrationsController#edit as HTML
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
Completed in 83ms
Warden::Strategies authenticate!
Warden::Strategies params: {"action"=>"new", "controller"=>"sessions"}


Started GET "/users/sign_in" for 127.0.0.1 at 2011-06-08 11:42:10 -0500
Processing by SessionsController#new as HTML
...

那么我如何/在哪里控制它被重定向到哪里?我是否正确重置了“确认”属性?

最佳答案

我们遇到了类似的问题(主要是因为在我们的系统中确认的用户并不是真正的批准用户)-并决定使用 user_status 属性。它有两种状态 - “待定”(已确认但尚未批准)和“已批准”。如果由于某种原因用户不再被批准(在您的情况下,他们更改了他们的电子邮件地址),那么我们将其更改回待定状态。

我们在 applicationController 上有一个 before_filter 来根据他们的状态验证他们应该去哪里。

def check_user_status
if current_user #logged in
case current_user.status
when "pending"
redirect_to root_path #user hasn't been approved yet
when "approved"
#tracking logic here
end
end
end

希望这可以帮助。

关于ruby-on-rails-3 - 设计 - 在用户编辑电子邮件后确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282475/

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