2011-05-15 12 views

Respuesta

2

Omniauth tiene soporte para OAuth y OAuth2, que ambos le permiten autenticar una cuenta de google.

Aquí están todas las estrategias que puede utilizar a través de OmniAuth: https://github.com/intridea/omniauth/wiki/List-of-Strategies

Éstos son los dos google gemas OAuth:

de acuerdo con las documentación de la primera gema:

Añadir el middleware a una aplicación Rails en config/inicializadores/omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google, CONSUMER_KEY, CONSUMER_SECRET 
    # plus any other strategies you would like to support 
end 

Esto se hace además a la creación de la principal omniauth gem.

+0

Creo que la pregunta es acerca de cómo obtener el access_token, no solo la autenticación. Este access_token es útil para usar google apis. – robermorales

+0

Ah, lo leí más que a los OP que pensaban que no podían hacer auth con omniauth a través de google, por lo que se preguntaban si necesitaban rodar los suyos. Omniauth tiene extensiones para auth a través de google, pero es un paso por encima de la implementación básica. – jstim

1

Tuve problemas, como usted, al usar gemas existentes con OAuth2 y Gmail ya que el protocolo OAuth1 de Google ahora está en desuso y muchas gemas aún no se han actualizado para usar su protocolo OAuth2. Finalmente pude hacerlo funcionar usando Net::IMAP directamente.

Aquí hay un ejemplo práctico de cómo recuperar el correo electrónico de Google utilizando el 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 
Cuestiones relacionadas