2

私は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 

答えて

1

、あなたはこのようにそれをやりたい理由があるのでしょうか?あなたのブラウザは一般的にそれらのためにそれをしないので、ユーザーが行うすべての要求にトークンを注入する必要があります。

代わりに、最初の訪問時にトークンを使用しないでください(アクセスを制御する方法であれば)。その最初のエントリの後にセッションが終了するまでフィルタの前にスキップするセッションフラグを設定します。

は、別の方法としては、(例えば devise)それらのいずれかを使用することができ、そこにいくつかの偉大な認証の宝石がある

+0

ねえマット、答えてくれてありがとう。私は同意する、ヘッダートークンはこれを行うための最良の方法ではありません。しかし、何らかの理由で現在のプロジェクトではこの方法が必要です(技術的ではありません)。私はあなたの(セッション)の他の提案を試してみたいと思います。あなたはそれを手伝ってもらえますか(私はレールが初めてです)。質問にいくつかのコードを追加してください。 –

+0

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 –

+0

こんにちは@PrasadPilla、そのコードはすばらしく見える - 私はあなたの質問に追加しました。それは働くのか問題を引き起こすのですか?後のリクエストのチェックをバイパスするために、あなたの前のフィルタでセッション変数を使用している限り、私にとっては正しいアプローチのようです。 – Matt

関連する問題