2011-05-15 14 views

risposta

2

Omniauth supporta OAuth e OAuth2, che saranno sia che consente di autenticare un account Google.

Ecco tutte le strategie è possibile utilizzare tramite omniauth: https://github.com/intridea/omniauth/wiki/List-of-Strategies

Ecco i due google OAuth gemme:

Come dalla documentazione del primo gioiello:

Aggiungere il middleware per un'applicazione Rails in config/inizializzatori/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 

questo è fatto oltre Per l'istituzione del principale omniauth gem.

+0

Penso che la domanda riguardi ottenere il token di accesso, non solo l'autenticazione. Questo access_token è utile per usare google apis. – robermorales

+0

Ah, ho letto di più che l'OP sentiva di non poter fare l'autenticazione con omniauth via google, così si chiedevano se avessero bisogno di eseguire il proprio. Omniauth ha estensioni per l'autenticazione via google, ma è un gradino sopra l'implementazione di base. – jstim

1

Ho avuto problemi, come te, utilizzando gemme esistenti con OAuth2 e Gmail poiché il protocollo OAuth1 di Google è ora deprecato e molte gemme non sono ancora state aggiornate per utilizzare il loro protocollo OAuth2. Finalmente sono riuscito a farlo funzionare usando Net::IMAP direttamente.

Ecco un esempio pratico di recupero dell'e-mail da Google utilizzando il protocollo OAuth2. Questo esempio utilizza le gemme mail, gmail_xoauth, e omniauth-google-oauth2.

Avrete anche bisogno di registrare la vostra app in Google's API console per ottenere i token 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 
Problemi correlati