Mendeley hat eine großartige API (sie haben sogar einen Wettbewerb ausgeschrieben, bei dem ihre API verwendet wird; diese Frage bezieht sich jedoch nicht darauf), die OAuth verwendet.
Ich versuche, eine Strategie zu schreiben, um die Mendeley-Authentifizierung zu ermöglichen, und habe dabei ziemliche Schwierigkeiten.
Ich gehe zu /auth/mendeley, werde zu Mendeley.com weitergeleitet, authentifiziere mich und werde dann auf eine Seite weitergeleitet, auf der nichts anderes steht als dies
{"error": "Verbraucherschlüssel nicht gefunden"}
Sie erwähnen, dass dies ein 3-Bein-OAuth ist, ist das etwas, das einen zusätzlichen Schritt erfordert, als was OAuth normalerweise tut?
Hier ist, was ich habe:
# /config/initializers/omniauth.rb
module OmniAuth
module Strategies
# tell omniauth to load the strategy
autoload :Mendeley, 'lib/mendeley'
end
end
# gather oauth credentials from the yml file
OAUTH = YAML.load_file(File.join(Rails.root, "config", "oauth.yml"))
# load all the possible oauth strategies
ActionController::Dispatcher.middleware.use OmniAuth::Builder do
provider OmniAuth::Strategies::Mendeley, OAUTH['mendeley']['consumer_key'], OAUTH['mendeley']['consumer_secret']
end
# lib/mendeley.rb
require 'omniauth/oauth'
require 'multi_json'
module OmniAuth
module Strategies
# Omniauth strategy for using oauth2 and mendeley.com
class Mendeley < OAuth2
def initialize(app, consumer_key = nil, consumer_secret = nil, &block)
client_options = {
:site => 'http://api.mendeley.com'
}
super(app, :mendeley, consumer_key, consumer_secret, client_options, &block)
end
end
end
end