3

私は現在、Rails チュートリアルのサンプル アプリに RESTful API を追加しています。また、デバイスやクリアランスなどの他の宝石を使用せずに、ドアキーパーを使用してそれを保護しようとしています。既存のセッションに基づいてドアキーパーがユーザーを認証するようにします。現在のセッションの実装remember_tokenでは、ブラウザーの Cookie (サインイン時に割り当てられる) に が保持され、ハッシュされたトークンが User モデルに格納されます。

モジュール (app/helpers/sessions_helper.rb) にメソッドがあり、これは ApplicationController にも含まれていますcurrent_userSessionsHelper

def current_user
  remember_token = User.digest(cookies[:remember_token])
  @current_user ||= User.find_by(remember_token: remember_token)
end

これが次のとおりですresource_owner_authenticator(他の失敗した実装はコメントアウトされています):

resource_owner_authenticator do
  # fail "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"
  # Put your resource owner authentication logic here.
  # Example implementation:
  #   User.find_by_id(session[:user_id]) || redirect_to(new_user_session_url)
  # puts current_user || "no user"
  # current_user # || redirect_to(signin_path)
  # remember_token = User.digest(request.cookies[:remember_token])
  # User.find_by(remember_token: remember_token)
  # puts "in resource_owner_authenticator"
  current_user
end

1 つの GET リクエストからのエラーを次に示します。

Started GET "/users/1" for 127.0.0.1 at 2014-08-24 12:40:25 -0400
Processing by UsersController#show as HTML
  Parameters: {"id"=>"1"}
Filter chain halted as #<Proc:0x007f294c886310@/home/mike/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/doorkeeper-1.4.0/lib/doorkeeper/helpers/filter.rb:8> rendered or redirected
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

まず、工夫やクリアランスなしで認証できるのか、仮にできたとしてもそれが得策なのか。第二に、何が利用できるか正確にはわかりませんDoorkeeper.configure-- is current_user? クッキーですか?ここで私が間違っていることを誰かが見ることができれば、ありがとう。Rails 4 と Doorkeeper 1.4.0 を使用しています。

4

0 に答える 0