2011-05-15 13 views

Odpowiedz

2

Omniauth obsługuje zarówno OAuth i OAuth2, które będą zarówno pozwalają na uwierzytelnienie konta google.

Oto wszystkie strategie można korzystać poprzez omniauth: https://github.com/intridea/omniauth/wiki/List-of-Strategies

Oto dwa google OAuth perełki:

jak na dokumentacja pierwszego klejnotu:

Dodaj middleware do aplikacji Rails w config/inicjalizatory/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 

Odbywa się to oprócz do konfigurowania główną omniauth gem.

+0

Wydaje mi się, że pytanie dotyczy uzyskania hasła access_token, a nie tylko uwierzytelniania. Ten access_token jest przydatny do używania google apis. – robermorales

+0

Ah, czytałem to bardziej, że OP czuł, że nie mogą zrobić auth z omniauth za pośrednictwem google, więc zastanawiają się, czy muszą wykonać własne. Omniauth ma rozszerzenia auth przez google, ale jest to krok powyżej podstawowej implementacji. – jstim

1

Miałem problemy, tak jak i ty, używając istniejących klejnotów z OAuth2 i Gmailem, ponieważ protokół OAuth1 Google jest teraz przestarzały, a wiele klejnotów nie zostało jeszcze zaktualizowanych, aby używać ich protokołu OAuth2. W końcu udało mi się go uruchomić bezpośrednio za pomocą Net::IMAP.

Oto działający przykład pobierania wiadomości e-mail od Google przy użyciu protokołu OAuth2. W tym przykładzie użyto klejnotów o następujących właściwościach: mail, .

Będziesz musiał również zarejestrować swoją aplikację w Google's API console, aby otrzymać tokeny interfejsu 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 
Powiązane problemy