2013-01-15 16 views
6

तक पहुंचने के लिए रूबी में सर्वर प्रकार के सर्वर पर सर्वर को अधिकृत करने का प्रयास करते समय अमान्य अनुदान मैं अपने लिए एक ऐप बनाने की कोशिश कर रहा हूं जो सीधे मेरे कैलेंडर से सीधे जुड़ता है ... लेकिन मैं कभी भी शामिल नहीं होना चाहता -authenticating। मैं बस प्रमाणीकरण को एक बार कोड करना चाहता हूं और इसके साथ किया जाना चाहता हूं।Google कैलेंडर

key = Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH, PASSWORD) 
asserter = Google::APIClient::JWTAsserter.new(
    SERVICE_ACCOUNT_EMAIL, 
    'https://www.googleapis.com/auth/calendar', 
    key) 
@client = Google::APIClient.new 
@client.authorization = asserter.authorize#(SERVICE_ACCOUNT_EMAIL) 
@client 

मेरे SERVICE_ACCOUNT_...PKCS . फ़ाइल मेरी सिनात्रा एप्लिकेशन के साथ निर्देशिका की जड़ में है:

प्रमाणीकरण कोड इस प्रकार है।
मैंने अपने जीमेल खाते पर Google कैलेंडर API सक्षम किया है। https://code.google.com/p/google-api-ruby-client/

$ ruby server.rb 
Faraday: you may want to install system_timer for reliable timeouts 
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:16: warning: already initialized constant KeyMap 
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:177: warning: already initialized constant DEFAULT_SEP 
W, [2013-01-15T09:52:11.371122 #28607] WARN -- : Google::APIClient - Please provide :application_name and :application_version when initializing the client 
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:869:in `fetch_access_token': Authorization failed. Server message: (Signet::AuthorizationError) 
{ 
    "error" : "invalid_grant" 
} 
    from /home/me/.rvm/gems/ruby-1.8.7-p371/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:882:in `fetch_access_token!' 
    from /home/me/.rvm/gems/ruby-1.8.7-p371/gems/google-api-client-0.6.1/lib/google/api_client/auth/jwt_asserter.rb:116:in `authorize' 
    from server.rb:32:in `build_client' 
    from server.rb:38 

(प्राधिकरण, जहां यह सर्वर संचार करने के लिए सर्वर के बारे में बात से कम) मुद्दा क्या हो सकता है:

मैं प्रमाणीकरण की एक विधि यहाँ पर देख रहा है? क्यों यह त्रुटि आ रही है? - खासकर जब से मैंने Google मणि की साइट से कोड की बहुत अधिक प्रतिलिपि बनाई है।

अद्यतन:

इस पाया:

invalid_grant trying to get oAuth token from google

कहते हैं मैं यह कर देना चाहिए: "सुनिश्चित करें कि आप अपने अनुरोध में access_type = ऑफ़लाइन निर्दिष्ट करते हैं।"

मैं रूबी मणि के साथ ऐसा कैसे करूं? http अनुरोधों को पूरी तरह से फिर से किए बिना?

+0

मैं ड्राइव करने के लिए एक कनेक्शन के साथ एक समान समस्या आ रही है:

यहाँ एक पूर्ण उदाहरण (रूबी) कि मैं मेरे लिए काम करने के लिए मिल गया है। बस आज सुबह शुरू किया। – tbeseda

+0

क्या आप एक संकल्प पर पहुंच गए हैं? – nurettin

+0

कोई भाग्य? एक ही मुद्दा है – hakunin

उत्तर

0

यहां एक कामकाजी कोड है, जो अंतिम पंक्ति को छोड़कर समान है, जिसमें उस उपयोगकर्ता का ईमेल होना चाहिए जो वास्तव में कैलेंडर (आप) का मालिक है। मुझे लगता है कि सेवा खाता ईमेल आपका ईमेल नहीं है।

client_asserter = Google::APIClient::JWTAsserter.new(
    config['client_email'], 
    PLUS_LOGIN_SCOPE, 
    key 
) 
$client.authorization = client_asserter.authorize(config['user_email']) 

साथ ही, सुनिश्चित करें कि आप सेवा खाते को सही तरीके से क्रेट करते हैं। मैंने इस गाइड का उपयोग किया: https://developers.google.com/+/domains/authentication/delegation, जो डोमेन एपीआई के लिए है, लेकिन पहला भाग समान होना चाहिए।

इसके अलावा, आपको प्रमाणीकरण के लिए एक और दायरा की आवश्यकता नहीं है? https://github.com/admitriyev/propellant/blob/master/main.rb

संबंधित मुद्दे