токены omniauth oauth для gmail недопустимы

#ruby #oauth #gmail #devise #omniauth

#ruby #oauth #gmail #разработать #omniauth

Вопрос:

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

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

Затем я просматриваю поток outh / OpenID, и Google предлагает мне
подтвердите доступ к gmail, перенаправив меня обратно в приложение с помощью токена a
и секретны в учетных данных 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 README для генерации токена с тем же пользователем с помощью скрипта python, это действительно работает.

Комментарии:

1. Нашли ли вы решение этой проблемы?

2. Здесь то же самое. Вы нашли решение?

3. У меня были похожие проблемы, но я нашел решение. Смотрите мой ответ ниже.

Ответ №1:

У меня это работает:

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

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

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

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

Комментарии:

1. анонимные работы. Спасибо… просто интересно, как получить контакты

2. Похоже, это больше не работает — секрет равен нулю, когда я обращаюсь к объекту omniauth. Существует отдельная ссылка, которая работает на blog.asif.in/blog/2012/03/03/google-oauth-and-rails но я не смог заставить это работать.

Ответ №2:

Протокол OAuth1 от Google в настоящее время устарел, и многие gems еще не обновлены для использования своего протокола 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
  

Комментарии:

1. Кажется, я все еще получаю сообщение об ошибке, когда у меня неверные учетные данные.

2. Я все еще получаю недействительные учетные данные с этим ответом.