【问题标题】:Disable GET for Devise routes, Rails 5为设计路线禁用 GET,Rails 5
【发布时间】:2018-03-26 00:33:13
【问题描述】:

我有带有 Ajax 登录/注册的 Devise 的 Rails 5,我想删除这两个操作的 GET 请求。默认的 sign_in/sign_up 路由已更改。这是我的routes.rb

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

【问题讨论】:

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


    【解决方案1】:

    sessions_controller.rbregistrations_controller.rb 中,您可以检查请求类型,如果是GET 请求,则返回404:

    如果您还没有为您的设计控制器打补丁,请创建目录 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
    

    session_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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2018-03-27
        • 2014-01-29
        • 1970-01-01
        相关资源
        最近更新 更多