私は現在、Rails チュートリアルのサンプル アプリに RESTful API を追加しています。また、デバイスやクリアランスなどの他の宝石を使用せずに、ドアキーパーを使用してそれを保護しようとしています。既存のセッションに基づいてドアキーパーがユーザーを認証するようにします。現在のセッションの実装remember_token
では、ブラウザーの Cookie (サインイン時に割り当てられる) に が保持され、ハッシュされたトークンが User モデルに格納されます。
モジュール (app/helpers/sessions_helper.rb) にメソッドがあり、これは ApplicationController にも含まれていますcurrent_user
。SessionsHelper
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 を使用しています。