gpt4 book ai didi

ruby-on-rails - 如何在 Devise 上重定向 'Confirmation token invalid'

转载 作者:行者123 更新时间:2023-12-04 05:52:53 26 4
gpt4 key购买 nike

我使用 devise :confirmable 配置我的 Rails 应用程序,注册后用户会收到一封带有确认链接的电子邮件。当用户第二次单击此链接时, token 无效,这是我的应用程序中的预期行为。但是,它将用户发送到位于“app\views\devise\confirmations\new.html.erb”的页面,并显示错误“确认 token 无效”,我想要的是显示该错误(<%= devise_error_messages! %>),但在我的登录页面中。 (实际上,有两种可能的状态:a)token过期,用户未被确认,用户必须再次申请token; b) token 已过期且用户已确认,因此用户必须登录)

为此,我继承了 Devise::ConfirmationsController 创建我自己的 ConfirmationsController 来覆盖 show 方法,这样我可以在出现任何错误时重定向到登录页面,如下所示:

class ConfirmationsController  < Devise::ConfirmationsController

def after_confirmation_path_for(resource_name, resource)
super
end

def new
super
end

def after_resending_confirmation_instructions_path_for(resource_name)
super
end

def create
super
end

def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])

if resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_navigational_format?
sign_in(resource_name, resource)
respond_with_navigational(resource){ redirect_to
after_confirmation_path_for(resource_name, resource) }
else
respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render 'devise/sessions/new' }
end
end

end

在我的 routes.rb 中我有这样的配置:

get "confirmations/show"

devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'}, :controllers => {:confirmations => 'confirmations'}
(...)

它正确地重定向到登录页面,但我不能将 resources.errors 中存在的错误传递给登录页面,无论多么困难 我试试。我该如何解决这个问题?

顺便说一句,我的用户模型是这样配置的:

devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable

最佳答案

您唯一需要做的就是更改 confirmation_instructions.html.erb

只需替换这一行

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token =>  @resource.confirmation_token) %></p>

有了这个

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token) %></p>

就是这样。

关于ruby-on-rails - 如何在 Devise 上重定向 'Confirmation token invalid',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18261840/

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