Je construis un fournisseur de OAuth à 2 pattes pour mon API. Tout est connecté correctement et je peux apporter des appels signés de la console de rails. Le problème que j'ai est que j'ai du mal à intégrer Oauth dans le Voici un exemple d'un appel de travail sur mon serveur: P> contrôleur_spec code>.
Processing by Api::ClientApplicationsController#index as JSON
Parameters: {"api_version"=>1}
Rendered text template (0.0ms)
Filter chain halted as #<OAuth::Controllers::ApplicationControllerMethods::Filter:0x007f85a51a8858 @options={:interactive=>false, :strategies=>:two_legged}, @strategies=[:two_legged]> rendered or redirected
Completed 401 Unauthorized in 15ms (Views: 14.1ms | ActiveRecord: 0.0ms)
(0.2ms) ROLLBACK
3 Réponses :
Je vais jeter un coup d'oeil sur la manière dont le test d'Omniauth aide au travail, en particulier ces fichiers: https://github.com/intridea/omniauth/tree/master/lib/omniauth/test . Voir leur page wiki sur l'intégration Test pour des idées de la manière dont cela est configuré. Je me rends compte que vous construisez un fournisseur, pas un client, mais cela peut être un bon point de départ. En outre, comme certains des commentateurs ont déjà dit, je ne sais pas si vous pouvez le faire avec un test de contrôleur; Vous aurez peut-être besoin d'une demande ou d'un test d'intégration pour simuler complètement l'environnement de rack. P>
s'avère que le meilleur moyen de tester mon contrôleur était aussi le plus simple. Au lieu d'essayer de signer chaque test afin que le contrôleur reçoit les bonnes informations (quelque chose qui appartienne effectivement à une spécification de requête, pas une spécification de contrôleur), j'ai compris que je pouvais simplement donner au contrôleur les informations nécessaires nécessaires manuellement.
à Faites ceci, je devais simplement faire du talon 2 méthodes: p> équergbing the Autoriser? code> La méthode causée par le rack authentifie en pensant qu'il a été authentifié. .
Autoriser? Code> Définissez également le
Client_Application CODE> en fonction des informations d'identification, alors je devais faire supporter cela aussi. Maintenant que l'authentifie est hors de la route, je peux tester correctement mon contrôleur. P> p>
Si vous souhaitez le tester dans une spécification de demande et que vous devez réellement tester sans encercler, vous pouvez construire un consommateur OAuth et signer une demande comme celle-ci:
@access_token = FactoryGirl.create :access_token @consumer = OAuth::Consumer.new(@access_token.app.key, @access_token.app.secret, :site => "http://www.example.com/") @path = "/path/to/request" @request = @consumer.create_signed_request(:get, @path, OAuth::AccessToken.new(@consumer, @access_token.token, @access_token.secret)) get @path, nil, { 'HTTP_AUTHORIZATION' => @request.get_fields('authorization').first }
On dirait que ce n'est pas vraiment une spécification de contrôleur. Avez-vous essayé comme une demande de demande?
C'est une spécification de contrôleur. L'exemple a été simplement dépouillé à son essentiel. Si vous êtes correct et que ce type de test devrait entrer dans la demande de demande, comment suis-je censé tester mon contrôleur lorsque je l'ai protégé par OAuth?
Je teste une API ces jours-ci et dans des spécifications de contrôleur, je passe simplement des valeurs appropriées dans l'en-tête. Je suis désolé, je ne sais pas vraiment pour OAuth. Ce que je crains dans votre cas, c'est que
create_signed_request code> ne reçoit pas le résultat attendu. Avez-vous essayé de le déboguer? Juste pensant: vous pouvez contourner certains
avant_filters code> pendant le test
Le seul filtre avant que j'ai est la méthode OauthiciCe à partir du gemme de plug-in oauth.
create_signed_request code> est celui qui fonctionne, c'est le test du contrôleur qui n'est pas. Je pense que ce qui pourrait se produire est que
apply_oauth! Code> est effectué avant le
obtenu: l'appel code> appelle est effectué, ce qui entraîne la voie de ne pas être dans la signature. Je devrais peut-être faire mon propre wrapper autour du
Obtenir un appel code> pour déterminer ce que le chemin est, le définit, le signer, puis appelez la super mise en œuvre d'obtenir. On dirait que beaucoup de travail inutile si ...
Eh bien, j'essaie d'expliquer, je doute
create_signed_request code> obtient ce qu'il attend car aucun serveur n'est exécuté dans des spécifications de contrôleur. Si vous souhaitez simplement tester le reste de votre contrôleur, contournez le
avant_filter code>. Si vous souhaitez tester l'authentification, essayez dans une demande de demande.
Je vois ce que tu veux dire. Alors quelque chose comme
: skip_before_filter: authentifier code> au début (: tous) des tests du contrôleur. Laisse moi essayer
Laissez-nous Continuez cette discussion en chat
Je viens de voir que tu es attaché à me contacter par chat. Toujours aucune solution adéquate trouvée maintenant?
Pas encore ... Il y a une prime maintenant.