2017-06-01 3 views
2

Ich bin relativ neu in Rails Web-Entwicklung und Programmierung im Allgemeinen. Ich entwickle gerade eine Webanwendung, die Daten von meinem Fitbit-Konto abrufen soll. Dies geschieht über die Fibit API und OAuth2.0.Curling und Parsing URL von Fitbit API

Im Wesentlichen ist hier mein Problem. Wie auf der Fitbit-Tutorial-Website https://dev.fitbit.com/apps/oauthinteractivetutorial gezeigt, muss ich eine Autorisierung vom Fitbit-Benutzer erhalten. Ich habe versucht, dies mit der folgenden korrekten URL zu tun

<%= link_to "Sign in with Fitbit", "https://www.fitbit.com/oauth2/authorize?response_type=code&client_id=228BT5&redirect_uri=http%3A%2F%2Fwww.builtbyburton.com%2Foauth2%2Fcallback&scope=activity%20location%20profile%20sleep&expires_in=604800" %> 

Wenn diese aufgerufen wird, wird der Benutzer auf die folgende URL weitergeleitet, wie erwartet:

http://www.builtbyburton.com/oauth2/callback?code=1093d4dc25f0c61acbbf8128a9247b0efd448c35#_=_ 

Derzeit, ich brauche das Segment zu erfassen der URL von der code= bis #_=_ Dieses Segment muss dann analysiert werden. Ich habe versucht, es mit einem eingebetteten curl zu tun, wie gezeigt:

<pre class="embedcurl">curl -X POST -i -H 'Authorization: Basic MjI4QlQ1OmU4OWFkZWJmYTUzNTU1MGMyNGUyNjdhOWRjM2MxNzIy' -H 'Content-Type: application/x-www-form-urlencoded' -d "clientId=228BT5" -d "grant_type=authorization_code" -d "redirect_uri=http%3A%2F%2Fwww.builtbyburton.com%2Foauth2%2Fcallback" -d "code=1093d4dc25f0c61acbbf8128a9247b0efd448c35" https://api.fitbit.com/oauth2/token</pre> 

Von dort, ich brauche die Antwort zu analysieren, die mir Anfragen machen lassen. Alles in allem bin ich mir nicht sicher, wie ich vom Autorisierungslink zu einer Anfrage mit einem OAuth2.0 Access Token kommen kann. Danke für die Hilfe!

Antwort

1

Nach der Fitbit docs:

Fitbit verwendet OAuth 2.0 für Benutzerautorisierung und API-Authentifizierung. Das OAuth 2.0-Framework erfordert, dass Ihre Anwendung einen Access Token erhält, wenn der Fitbit-Benutzer Ihre App autorisiert, auf ihre Daten zuzugreifen. Das Access Token wird verwendet, um eine HTTP-Anfrage an die Fitbit API zu stellen.

Sie benötigen keine Fitbit-spezifische Bibliothek, um die Fitbit Web API zu verwenden. Stattdessen wird empfohlen, dass Sie die für Ihre Plattform verfügbare beste OAuth 2.0- oder HTTP-Client -Bibliothek verwenden. Wenn Sie keinen Favoriten haben OAuth 2.0 oder HTTP-Bibliothek noch haben wir einige hier

aufgeführt

Es gibt nichts für Ruby aufgeführt, aber wenn Sie Schienen google OAuth2, der erste Treffer ist:

https://github.com/intridea/oauth2

Das Beispiel gibt sieht ziemlich einfach:

gem install oauth2 

die Schienen entsprechen den folgenden Code zu Ihrem Gemfile hinzuzufügen wäre:

gem oauth2 

Und hier ist der Beispielcode:

client = OAuth2::Client.new('client_id', 'client_secret', :site => 'https://example.org') 

client.auth_code.authorize_url(:redirect_uri => 'http://localhost:8080/oauth2/callback') 
# => "https://example.org/oauth/authorization?response_type=code&client_id=client_id&redirect_uri=http://localhost:8080/oauth2/callback" 

token = client.auth_code.get_token('authorization_code_value', :redirect_uri => 'http://localhost:8080/oauth2/callback', :headers => {'Authorization' => 'Basic some_password'}) 
response = token.get('/api/resource', :params => { 'query_foo' => 'bar' }) 
response.class.name 
# => OAuth2::Response 

Ursprüngliche Antwort:

Ich habe versucht, es zu tun mit einem eingebetteten curl wie abgebildet mit:

Sie können keinen beliebigen Code in einer HTML-Datei haben. Rails verwendet etwas namens ERB (oder eine andere Parsing-Engine Ihrer Wahl), um Seiten wie page1.html.erb zu analysieren, die sich in bestimmten Verzeichnissen in Ihrem Rails-Projekt befinden - aber dann müssen Sie die Regeln des ERB-Parsing befolgen. Sie kann machen ERB ausführen beliebigen Ruby-Code, aber ein bash Befehl, wie curl ist nicht einmal Ruby-Code - es ist bash Code.

http://www.builtbyburton.com/oauth2/callback?code=1093d4dc25f0c61acbbf8128a9247b0efd448c35#_=_ 

Derzeit, ich brauche das Segment der URL aus dem Code zu erfassen = zu # _ = _

Der Teil der URL wird als String Abfrage bekannt. Sie können es wie folgt erhalten:

require 'uri' 

url = 'http://www.builtbyburton.com/oauth2/callback?code=1093d4dc25f0c61acbbf8128a9247b0efd448c35#_=_' 

obj = URI(url) 
query_str = obj.query 
puts query_str 

--output:-- 
code=1093d4dc25f0c61acbbf8128a9247b0efd448c35 

Sie können nur erhalten den Berechtigungscode wie folgt aus:

name, value = query_str.split '=' 
puts value 

--output:-- 
1093d4dc25f0c61acbbf8128a9247b0efd448c35