Omnuth OAUT токены для Gmail являются недействительными - PullRequest
8 голосов
/ 11 апреля 2011

Я пытаюсь получить oauth-токен, который могу использовать с gmail_xauth (ruby gem) посмотреть на почту пользователя. Я впервые зарегистрировал свое приложение в Google и затем настройте устройство для запроса доступа к почте:

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

Затем я иду через поток outh / openid, и Google предлагает мне утвердить доступ к gmail, перенаправив меня обратно в приложение с токеном и секрет в учетных данных omniuth и моя учетная запись Google перечисляет мое приложение как разрешено для доступа к моим данным. Все идет нормально.

Теперь, когда я беру эти учетные данные и пытаюсь использовать их с gmail_xoauth так:

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

Я получаю сообщение об ошибке "Net :: IMAP :: NoResponseError: Неверные учетные данные (Отказ) ".

Интересно, что после чтения gmail_xoauth для создания токена с тем же потребителем, использующим скрипт на python, он работает.

Ответы [ 2 ]

5 голосов
/ 27 мая 2011

Это работает для меня:

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

Я использую гем Gmail, поэтому для подключения он выглядит так:

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

Я передаю объект аутентификации в, но вы получите его из переменной env env ["omniauth.auth"] .Я использую анонимный / анонимный ключ / секрет, так как я не зарегистрировал свой домен в Google, но я уверен, что вы можете здесь .Он все равно будет работать с анонимным / анонимным, но Google просто предупредит пользователя.

3 голосов
/ 12 октября 2012

Протокол Google OAuth1 устарел, и многие гемы еще не обновлены, чтобы использовать их протокол OAuth2. Вот рабочий пример получения электронной почты от Google, используя их протокол OAuth2. В этом примере используются mail, gmail_xoauth, omniauth и omniauth-google-oauth2 драгоценные камни.

Вам также необходимо зарегистрировать свое приложение в консоли API Google , чтобы получить свои токены 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
...