2017-10-13 14 views
0

私はAjaxログイン/登録でDeviseでRails 5を持っています。これら2つのアクションに対するGETリクエストを削除したいと思います。デフォルトのsign_in/sign_upルートが変更されます。これは私のroutes.rbです:Devitsルート、RailsでGETを無効にする5

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

答えて

1
sessions_controller.rb

registrations_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 

同じことがsessions_controllerのために行きます。私はちょうど登録/ログインを表示するメソッドをオーバーライドhttps://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb

0

私はカスタムregistration_controllersessions_controllerを使用していますので:参考のために::https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb となるすべてのGETの要求を無効にすることで何かを壊すかもしれませんが、必要な場合には、特定のアクションをターゲットにすることができますページ。どちらの方法もshowです。私は両方のカスタムコントローラにこのメソッドを追加します:

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

誰かが登録またはログインURLにナビゲートしてもPOST要求がうまくいけば404を返します。

関連する問題