Faraday-Timeout-Fehler bei Omniauth (benutzerdefinierte Strategie) / Türhüter
Ich verfolge derzeit mitRailscast und für meine spezifische Situation stoße ich beim Rückruf von Omniauth auf einen Faraday-Timeout-Fehler.
Derzeit verwende ich eine Rails-Anwendung als API und ein Backbone als Javascript-Front-End (auf derselben Anwendung).
Ich beschloss, die API mit OAuth zu sperren, und stellte Omniauth eine benutzerdefinierte Strategie für den Zugriff auf die API als Client sowie Doorkeeper für die Verwaltung der Autorisierungslogik zur Verfügung
module OmniAuth
module Strategies
class Twiddle < OmniAuth::Strategies::OAuth2
option :name, :twiddle
option :client_options, {
site: "http://localhost:3001",
authorize_path: "/oauth/authorize"
}
uid do
raw_info["id"]
end
info do
{
firstName: raw_info["firstName"],
lastName: raw_info["lastName"],
email: raw_info["email"]
}
end
def raw_info
@raw_info ||= access_token.get('/api/v1/user').parsed
end
end
end
end
Ich habe die benutzerdefinierte Strategie wie folgt aufgenommen:
require File.expand_path('lib/omniauth/strategies/twiddle', Rails.root)
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twiddle, id, secret # Omitting the actual ones for obvious reasons
end
Ich verwende derzeit diese Edelsteine in meinem Bundle
# OAuth
gem 'oauth2'
gem 'omniauth'
gem 'omniauth-oauth2'
gem 'omniauth-facebook'
gem 'doorkeeper'
Hier authentifiziere ich mich und versuche, das richtige Zugriffstoken abzurufen (und auch, wo ich nicht weiterkomme)
def loginParse
if ( user = User.authenticate( params[:email], params[:password] ) )
session[:user_id] = user.id
redirect_to '/auth/twiddle/'
else
render :controller => "authentication", :action => "loginIndex", :notice => "Incorrect credentials"
end
end
Hier ist das Routing aus der routes.rb
# Oauth urls
match '/auth/twiddle/callback', to: "authentication#connectAPI"
match "/auth/facebook/callback", to: "authentication#loginSocialMedia"
Die Anwendung kann die connectAPI-Aktion niemals rendern und bleibt an diesem Punkt VOLLSTÄNDIG hängen (angegeben durch die Serverprotokolle).
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Doorkeeper::Application Load (0.2ms) SELECT `oauth_applications`.* FROM `oauth_applications` WHERE `oauth_applications`.`uid` = '' LIMIT 1
CACHE (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Doorkeeper::AccessToken Load (0.3ms) SELECT `oauth_access_tokens`.* FROM `oauth_access_tokens` WHERE `oauth_access_tokens`.`revoked_at` IS NULL AND `oauth_access_tokens`.`application_id` = 1 AND `oauth_access_tokens`.`resource_owner_id` = 1 ORDER BY created_at desc LIMIT 1
(0.1ms) BEGIN
Doorkeeper::AccessGrant Load (0.2ms) SELECT `oauth_access_grants`.* FROM `oauth_access_grants` WHERE `oauth_access_grants`.`token` = '' LIMIT 1
SQL (1.1ms) INSERT INTO `oauth_access_grants` (`application_id`, `created_at`, `expires_in`, `redirect_uri`, `resource_owner_id`, `revoked_at`, `scopes`, `token`) VALUES (1, '2012-08-08 03:10:31', 600, 'http://localhost:3001/auth/twiddle/callback', 1, NULL, '', '')
(1.4ms) COMMIT
Redirected to http://localhost:3001/auth/twiddle/callback?code=a
Completed 302 Found in 12ms (ActiveRecord: 3.7ms)
(twiddle) Callback phase initiated.
Viele der uids / wichtigen Informationen wurden aus dem Protokoll entfernt.
Schließlich ist dieser Fehler gegeben:
Faraday :: Error :: TimeoutError (Timeout :: Error):
Ich hoffe, dass ich dieses Problem gründlich erklärt habe.
Ich weiß nicht, warum genau die Anwendung beim Callback-initiierten Teil von Omniauth einfriert. Ich habe versucht, Bundler zu aktualisieren, da mich einige andere Fragen zum Stackoverflow darauf hingewiesen haben, aber es funktioniert nicht.
Vielleicht ist mein Verständnis von OAuth2 etwas trüb.
Wenn mir jemand helfen kann, würde ich es sehr schätzen