私はAPIとUIの両方を持つレールアプリケーションを構築しています。私はAPIのHTTPトークン認証(ヘッダー)を実装しており、可能ならば同様にWebアプリケーションも同じようにしたいと考えています。他のサードパーティのアプリケーションだけがアクセスするWebアプリケーションのHTTP認証を処理する方法は?
ユーザートークンをsession[:token]
に保存し、認証にauthenticate_or_request_with_http_token
メソッドを使用しています。 application_controllerにはbeforeフィルタがあり、他のすべてのコントローラは継承されます。したがって、HTTPヘッダートークンは、APIのすべてのエンドポイントとWebアプリケーションのすべてのページに必要です。
パートナーアプリケーションがエンドポイントにアクセスするたびにトークンを送信するため、APIが正常に動作していますが、Webアプリケーションの場合は初めてトークンを取得しています(ユーザーがパートナーアプリからリダイレクトされたとき)。アプリ。次に、レールアプリ内のすべてのルート/ページにHTTPヘッダートークンを送信する方法が必要です。これを行う方法を提案してください。そうでなければ、まったく別のアプローチをとってください。
編集:headerトークンを使用すると、Webアプリケーションで最も簡単な方法であれば、私は知らない
def authenticate_user
authenticate_or_request_with_http_token do |token, options|
user_id = Setting.long_decode_id(token)
user = User.find_by(id: user_id)
if (user.present?)
session[:api_current_user] = user.id
ねえマット、答えてくれてありがとう。私は同意する、ヘッダートークンはこれを行うための最良の方法ではありません。しかし、何らかの理由で現在のプロジェクトではこの方法が必要です(技術的ではありません)。私はあなたの(セッション)の他の提案を試してみたいと思います。あなたはそれを手伝ってもらえますか(私はレールが初めてです)。質問にいくつかのコードを追加してください。 –
def authenticate_user authenticate_or_request_with_http_token do | token、options | \t \t USER_ID = Setting.long_decode_id(トークン) \t \tユーザー= User.find_by(ID:USER_ID) \t \t \t(user.present?) \t \t \tセッションなら[:api_current_user] = user.id –
こんにちは@PrasadPilla、そのコードはすばらしく見える - 私はあなたの質問に追加しました。それは働くのか問題を引き起こすのですか?後のリクエストのチェックをバイパスするために、あなたの前のフィルタでセッション変数を使用している限り、私にとっては正しいアプローチのようです。 – Matt