如何使用Omniauth_callbacks控制器和自定义设计注册控制器

时间:2013-01-07 09:53:02

标签: ruby-on-rails-3 routing devise omniauth

我有一个用于设计设置的自定义注册控制器,这是:

  devise_for :users, controllers: {registrations: "registrations"}

并在控制器中:

class RegistrationsController < Devise::RegistrationsController

  protected

    def after_update_path_for(resource)
      user_path(resource)
    end
end

效果很好。

但是我也有omniauth身份验证,它本身也很有效:

  devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}
class OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def all
    user = User.from_omniauth(request.env["omniauth.auth"])
        if user.persisted?
        flash.notice = "Signed in!"
        sign_in_and_redirect user
        else
        session["devise.user_attributes"] = user.attributes
        redirect_to sign_up_path
        end
  end
    alias_method :linkedin, :all
    alias_method :twitter, :all

end

然而,你可能已经看到了我的问题 - 我不知道如何让它们一起工作,因为它们都以'devise_for:users'开头,所以无论哪种方式我将它们放在路径文件中,不行。

如何让它们同时工作,以便注册控制器只覆盖“编辑”和“更新”操作,而omniauth_callbacks控制器处理身份验证?

由于

1 个答案:

答案 0 :(得分:2)

在routes.rb中,您可以像这样为devise_for添加逗号分隔路径 -

devise_for :users, controllers: {registrations: "registrations", omniauth_callbacks: "omniauth_callbacks"}

这样可行。