2

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) もおそらく呼び出されませんが、ルート パラメーターに基づいてインスタンス変数を設定するため、問題は発生しません。

4

2 に答える 2