覆盖 Devise 的注册控制器以允许在成功注册后进行重定向 [英] Overriding Devise's registration controller to allow for a redirect after a successful sign_up has been done

查看:17
本文介绍了覆盖 Devise 的注册控制器以允许在成功注册后进行重定向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找遍了整个地方,找到了很多信息……但对我来说没有任何用处,我不明白:(

I have looked all over the place, and found a lot of info... but nothing works for me and I don't get it :(

我知道您应该覆盖注册控制器,如下所示:

I know that you are suppose to override the registration controller, like this:

class Users::RegistrationsController < Devise::RegistrationsController

def after_sign_up_path_for(resource)
  authors_waiting_path
end 

end

然后按照 Tony Amoyal 展示的例子 http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/,我应该更改我的路线以更新对新控制器的访问:

Then following the example showed by Tony Amoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/, I am supposed to change my routes to update the access the new controller:

devise_for :users, :controllers => { :registrations => "users/registrations" } do
#get '/author/sign_up', :to => 'devise/registrations#new'
#get '/client/sign_up', :to => 'devise/registrations#new'  
get '/author/sign_up', :to => 'users/registrations#new'
get '/client/sign_up', :to => 'users/registrations#new'      
end

是的,我在这里有点奇怪,因为我正在捕捉一些特定的路径将它们发送到注册页面,这使我能够有效地创建 2 个注册场景.我评论了我覆盖注册控制器之前的内容.

Yes, I have something a bit strange here, because I am catching some specific path to send them to the registration page, this allows me to create effectively 2 registration scenario. I commented what I had before I had overridden the registration controller.

即使所有这些以及我的authors_waiting_path 是一个有效路径,它也会在注册后继续进入登录页面:(

Even with all this and my authors_waiting_path being a valid path, it just keeps on going to the sign-in page after registration :(

这真的很令人沮丧.

亚历克斯

我也在设计维基上找到了这个:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(注册)

edit: I also found this on the devise wiki: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)

但我不知道在哪里定义这个创建方法?我应该覆盖会话控制器吗???

But I have no idea where to define this create method ? should I override the session controller ???

编辑 2:

我对控制器进行了虚拟覆盖:

I put a dummy override of the controller:

  class Pouets::RegistrationsController < Devise::RegistrationsController

    def after_sign_up_path_for(resource)
      authors_waiting_path
    end 

    def new
      super
    end

    def create
      puts "was here"
      super
    end

    def edit
      super
    end

    def update
      super
    end

    def destroy
      super
    end

    def cancel
      super
    end

  end

而且我从来没有在我的日志中出现过在这里"......我真的觉得它完全忽略了覆盖......我一定是做错了什么:(

And I never the "was here" in my logs.... I really have the feeling that it's totally ignoring the override... I must be doing something wrong :(

推荐答案

好的...我可以覆盖它,所以你应该是 :0

Ok... I am able to override it so you should be either :0

创建文件夹 app/controllers/users

Create folder app/controllers/users

把 registrations_controller.rb 放在那里:(带有会话的选项 - 但它会尝试 sign_in 并稍后重定向 - 它可能不是你的预期行为).此外,这是来自设计维基,我不确定它是否有效

put there registrations_controller.rb with: (option with session - but it will try sign_in and later redirect - it may be not intended behavior for you ). Furthermore this is from devise wiki and I am not sure if it works

class Users::RegistrationsController < Devise::RegistrationsController

  def create
    session["#{resource_name}_return_to"] = complete_path
    super
  end

end

重启应用程序(只是为了确保你不信任任何东西)

restart application (just for ensure you don't trust anything)

总而言之,你必须覆盖 Create 如果你只想重定向用户...如果你想定义一些更复杂的场景,你应该monkeypatch sign_in_and_redirect

All in all you must override Create If you want redirect only Users... if you want define some more complex scenario you should monkeypatch sign_in_and_redirect

所以你的控制器看起来像

so your controller will looks like

class Users::RegistrationsController < Devise::RegistrationsController
  # POST /resource/sign_up
  def create
    build_resource

    if resource.save
      set_flash_message :notice, :signed_up

      #sign_in_and_redirect(resource_name, resource)
      #this commented line is responsible for sign in and redirection
      #change to something you want..
    else
      clean_up_passwords(resource)
      render_with_scope :new
    end
  end
end

第二个选项尝试使用monkeypatch helper ....

second option try to monkeypatch helper ....

module Devise
  module Controllers
    # Those helpers are convenience methods added to ApplicationController.
    module Helpers
      def sign_in_and_redirect(resource_or_scope, resource=nil, skip=false)
        #intended behaviour for signups
      end
    end
  end
end

这篇关于覆盖 Devise 的注册控制器以允许在成功注册后进行重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆