WordPress サイトのサブディレクトリに Rails アプリケーション (5.2.4.1) をデプロイしています。私のコントローラーは before_action メソッドを呼び出してユーザーを認証します
class ClientsController < ApplicationController
before_action :authenticate unless ENV["RAILS_ENV"] == "development"
before_action :set_agent
before_action :set_client, only: [:show, :edit, :update, :destroy]
ユーザーがドメイン上の別のサイトからの Cookie を持っていない場合にリダイレクトする ApplicationController のメソッドを呼び出す
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
private
def authenticate
logger.info("Authenticate method called") # outputs on first load, not subsequent
if request.cookies.collect{|c| c.grep(/cookiename/)}.blank?
redirect_to 'https://example.com', status: :moved_permanently and return
end
end
プライベート ブラウザ (Cookie がないため) にアクセスしてコントローラにアクセスしようとすると、期待どおりにリダイレクトされます。
同じ URL を入力すると、認証メソッドは呼び出されません。コントローラーはアクションをレンダリングします。メソッドにログ ステートメントを配置しましたauthenticate
が、それ以降のページの読み込みでは呼び出されません。
私は何か間違ったことをしていますか?ページが読み込まれるたびに before_action メソッドが呼び出されることを期待しています。他の 2 つ (set_agent と set_client) もおそらく呼び出されませんが、ルート パラメーターに基づいてインスタンス変数を設定するため、問題は発生しません。