2017-10-13 77 views
0

我有Rails 5与Devise的Ajax登录/注册,我想删除GET请求这两个行动。默认的sign_in/sign_up路线已更改。这是我的routes.rb禁用GET的设计路线,Rails 5

devise_for :users, :path => '', :path_names => { :sign_in => "login", 
         :sign_out => "logout", :sign_up => "registration" }, 
         :controllers => {:sessions => 'sessions', 
             :registrations => 'registrations' 

回答

1

sessions_controller.rbregistrations_controller.rb您可以检查请求类型,并返回404,如果它是一个GET要求:

如果您还没有猴子打补丁的色器件控制器已经创建了目录app/controllers/devise和文件registrations_controller.rb添加到它:

class Devise::RegistrationsController < DeviseController 
    prepend_before_action: :check_get_request # you can limit it to certain actions with only: [:new, etc.] 

    private 
    def check_get_request 
    if request.get? 
     # respond with 404 or 422, or whatever 
    else 
     super 
    end 
    end 
end 

也是一样的sessions_controller。你可能会通过禁用所有GET请求碰坏,但你可以针对特定的行动,如果需要的话:参考:https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb 和:https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb

0

因为我使用自定义的registration_controllersessions_controller我只是覆盖其中显示的注册方法/登录页面。两种方法都是show。我同时添加到自定义控制器的这种方法:

def new 
    raise ActionController::RoutingError.new('Not Found') 
end 

返回404,如果有人导航到注册或登录网址,但POST请求正常工作。