私はapiベースのアプリケーションsite.com(クライアントアプリケーション)、api.site.com(サーバーアプリケーション)を開発中ですdevise parent_controllerをdevise inherited controllerに使用する方法はありますが、ActiveAdmin devise controllerをスキップしますか?
私のapi.site.comには、パスワード、confirmationsコントローラがあります。コントローラを作成する。デフォルトでは、Devise親コントローラはアプリケーションコントローラですが、Devise継承コントローラはApiBaseController api_authenticationアクションを通過する必要があります。だから、Devise.rbは、コンフィギュレーション、次があります。
config.parent_controller = 'ApiBaseController'
API認証は現在正常に動作しています。
ApiBaseControllerサンプルコード:
class ApiBaseController < ApplicationController
before_action :api_authentication
def api_authentication
api_key = request.headers['Api-Key']
@app = Application.find_by_api_key(api_key) if api_key
unless @app
return render json: { errors: { message: 'Something went wrong, contact admin', code: '1000' } }
end
end
end
今私はActiveAdminを使用しています、私はブラウザ上http://localhost:3000/admin/loginを開こうとしたActiveAdminをインストールした後、私が代わりにアクティブな管理者のログインページのブラウザで次のエラー応答を見た:
{"errors":{"message":"Something went wrong, contact admin","code":1000}}
私は問題をチェックし、active_admin/devise/sessions
コントローラもApiBaseControllerを通過したことに気付きました。これは、親コントローラをApiBaseController(config.parent_controller = 'ApiBaseController'
)に設定したためです。私はコードを削除し、ActiveAdminは正常に機能しました。
しかし、私がDevise設定(config.parent_controller = 'ApiBaseController'
)を削除したので、パスワード、確認コントローラがApiBaseController api_authentication()を通過しませんでした。
あなたが問題を理解している場合は、私に解決策を教えてください。
要約すると、私はすべてのAPIを必要とするDevise継承されたコントローラは、api_authentication()チェックのためにApiBaseControllerを渡す必要があり、ActiveAdmin DeviseコントローラはApiBaseControllerを渡す必要はありません。
ありがとうございます。
はい、私はApplicationControllerに内部の任意のコードを望んでいない、我々はすでにApiBaseController –
持って、あなたは 'before_action使用することができます場合は、api_authenticationを:?json_request'あなたのAPIベースのコントローラであなたの提案を –
おかげで、私はこれを試みます。ところで、私はそれを解決しました、私はDeviseからの解決を期待していました。私は将来ApiBaseControllerのような多くの親を持つかもしれないからです。 –