2011-04-11 14 views
8

Estoy tratando de obtener un token oauth que puedo usar con gmail_xauth (ruby gem) para mirar el correo de un usuario. Me inscribí a mi aplicación con Google y luego configurar legado para solicitar el acceso al correo:omniauth oauth tokens para gmail no son válidos

config.omniauth :google, 'key', 'secret', :scope => 'https://mail.google.com/mail/feed/atom/' 

luego voy a través del flujo outh/openid y Google me lleva a aprobar el acceso a Gmail, me usuarios sean redirigidos a la aplicación con un token y secreto en las credenciales de omniuth & mi cuenta de Google enumera mi aplicación como autorizada para acceder a mis datos. Hasta aquí todo bien.

Ahora, cuando tomo esas credenciales y tratar de utilizarlos con gmail_xoauth así:

require 'gmail_xoauth' 
    imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = 
nil, verify = false) 
    imap.authenticate('XOAUTH', '[email protected]', 
    :consumer_key => 'key, 
    :consumer_secret => 'secret', 
    :token => 'omniauth_returned_token', 
    :token_secret => 'omniauth_returned_secret' 
) 

consigo un error ":: IMAP Net :: NoResponseError: credenciales no válidas (fallo)".

Curiosamente, siguiendo el README gmail_xoauth para generar un token con un mismo consumidor utilizando un script de python funciona.

+1

¿Encontró una solución a este problema? – Pablo

+0

Lo mismo aquí. ¿Encontraste una solución? – Pasta

+0

Tuve problemas similares, pero encontré una solución. Ver mi respuesta a continuación. – Andrew

Respuesta

5

Esto funciona para mí:

config.omniauth :google, 'anonymous', 'anonymous', :scope => 'https://mail.google.com/' 

estoy usando la gema Gmail, por lo que para conectarlo ve así:

gmail = Gmail.connect(:xoauth, auth.uid, 
    :token   => auth.token, 
    :secret   => auth.secret, 
    :consumer_key => 'anonymous', 
    :consumer_secret => 'anonymous' 
) 

estoy pasando un objeto de autenticación en, pero Lo obtendré de la variable env env ["omniauth.auth"]. Estoy usando anónimo/anónimo para la clave/secreto ya que no he registrado mi dominio en google, pero creo que puedes here. Todavía funcionará con anónimo/anónimo, pero Google solo advertirá al usuario.

+0

obras anónimas. Gracias ... me pregunto cómo conseguir los contactos – kgpdeveloper

+0

Parece que ya no funciona, el secreto es nulo cuando accedo al objeto omniauth. Hay un enlace por separado que funciona en http://blog.asif.in/blog/2012/03/03/google-oauth-and-rails/ pero no pude hacer que esto funcione. – David

+0

Esto ya no funciona – tommybond

3

El protocolo OAuth1 de Google ahora está en desuso y muchas gemas aún no se han actualizado para usar su protocolo OAuth2. Este es un ejemplo práctico de cómo recuperar el correo electrónico de Google utilizando su protocolo OAuth2. Este ejemplo utiliza las gemas mail, gmail_xoauth, omniauth y omniauth-google-oauth2.

También deberá registrar su aplicación en Google's API console para obtener sus tokens de API.

# in an initializer: 
ENV['GOOGLE_KEY'] = 'yourkey' 
ENV['GOOGLE_SECRET'] = 'yoursecret' 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], { 
    scope: 'https://mail.google.com/,https://www.googleapis.com/auth/userinfo.email' 
    } 

end 

# ...after handling login with OmniAuth... 

# in your script 
email = auth_hash[:info][:email] 
access_token = auth_hash[:credentials][:token] 

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false) 
imap.authenticate('XOAUTH2', email, access_token) 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    mail = Mail.read_from_string msg 

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end 
+1

Parece que sigo recibiendo un error aquí donde tengo credenciales no válidas. – locoboy

+1

Recibo credenciales no válidas aún con esta respuesta. – tommybond

Cuestiones relacionadas