用设计确认后自动登录

时间:2014-08-11 21:52:58

标签: ruby-on-rails ruby ruby-on-rails-4 devise devise-confirmable

我正在使用设计确认。我有一些自定义的东西,我需要覆盖设计的确认!方法,所以在我的用户模型中,我有以下覆盖它的方法:

def confirm!
  super
  gb = Gibbon::API.new(ENV['MAILCHIMP_API_KEY'])
  gb.lists.subscribe({:id => ENV['MAILCHIMP_ID'], :email => {:email => self.email }})
end

这完美无缺。现在我想要它,以便用户在确认后自动登录,但无法弄清楚如何。我知道这被认为是一个安全漏洞,但我已经承受了风险,因此我的网站用户体验值得。我不想对routes文件做任何事情,因为这个方法已经有效,所以我应该可以从这里开始。我已经尝试将以下内容放入我的配置文件中:

config.allow_insecure_sign_in_after_confirmation = true

但它不会签署用户。

我已查看Avoid sign-in after confirmation link click using devise gem?处的堆栈溢出页面,但没有帮助,请不要将此标记为重复。

谢谢大家。

2 个答案:

答案 0 :(得分:18)

您可以更改routes.rb和controllers / users / confirmations_controller.rb(可能是默认路径)

routes.rb映射用户/ confrimations_controller

devise_for :users, controllers: {confirmations: 'users/confirmations'}

confirmmations_controller自动登录并重定向到

def after_confirmation_path_for(resource_name, resource)
  sign_in(resource)
  any_path # redirect_to is not necessary
end

答案 1 :(得分:0)

添加sign_in(资源)以在controllers / users / confirmations_controller.rb中显示方法:

def show
  self.resource = resource_class.confirm_by_token(params[:confirmation_token])
  yield resource if block_given?
  if resource.errors.empty?
    sign_in(resource)
    set_flash_message!(:notice, :confirmed)
    respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
  else
    respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
  end
end