在Devise注册后立即在控制器中执行某些操作

时间:2014-06-19 00:25:04

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

当用户使用Devise注册时,我想检查他们的电子邮件地址是否包含@mysite.com,如果是,请使用新用户的ID在表格中创建新记录。

我一直在通过Devise文档查看用户注册后采取行动的方法(因为我需要他们的ID用于关联),但我找到的只是after_sign_up_path_for这只是一条路径

有什么想法吗?

 class RegistrationsController < Devise::RegistrationsController
   def create
     super

     # I was hoping "super" creates the new user, and now I would have access to current_user.id, but that doesn't appear to be true.
   end
 end

2 个答案:

答案 0 :(得分:2)

如果您需要在用户登录后执行某项功能,Devise会提供after_database_authentication回调方法。您可以在用户模型中使用回调,而不是在控制器中,这样做的好处是您不必覆盖Devise Registrations控制器。

请参阅documentation了解DatabaseAuthenticatable。

我在Rails Devise Tutorial中介绍了一些类似的技巧,但在教程中我只提及after_database_authentication回调方法,指出没有必要覆盖Devise Registrations控制器来容纳帖子 - 签约行动。

答案 1 :(得分:0)

我从我的一个应用程序中复制了以下结构:

class Users::RegistrationsController < Devise::RegistrationsController
  after_filter :do_something, only: :create

  def create
    ...

    super

    ...
  end

  def do_something
    # User succesfully created?
    return unless @user.id

    ... @user.id
  end
end