Я установил авторизацию Google в своем приложении Rails 4 и работает так, как ожидалось. Теперь я хотел бы получить авторизованные пользовательские электронные письма с использованием Gmail API, но я получаю ошибку #<Net::HTTPUnauthorized:0x0055ed1f7f8d68>
в браузере в ответ на мой запрос GET.Net :: HTTPUnauthorized при попытке доступа к API Gmail из RAILS 4
В консоли devs я включил все необходимые API-интерфейсы.
Мой код:
Инициализаторы/omniauth.rb
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, Rails.application.secrets.client_id, Rails.application.secrets.client_secret, {scope: ['email',
'https://www.googleapis.com/auth/gmail.modify'],
access_type: 'offline', client_options: {ssl: {ca_file: Rails.root.join("cacert.pem").to_s}}}
end
User.rb
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
В мой контроллер:
def mail
require 'net/http'
access_token = current_user.oauth_token
e = current_user.email
u = "https://www.googleapis.com/gmail/v1/users/#{e}/messages? maxResults=50&key=#{access_token}"
url = URI.parse(u)
req = Net::HTTP::Post.new(url.request_uri)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = (url.scheme == "https")
response = http.request(req)
@resbody = response
end
На мой взгляд
<%= @resbody %>
Установленные камни:
gem "omniauth-google-oauth2", "~> 0.2.1"
gem "google-api-client"
Когда я попытался выполнить
curl https://www.googleapis.com/gmail/v1/users/my-email/messages&access_token=ya29.Ci .... A
[1] 6687
я получил такое сообщение:
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
Вопрос: Я не понимаю. Если я авторизовался с учетной записью Google и сохранил токен доступа в базе данных, а затем извлек его для использования с Gmail API, он не работает?
Что может быть, что я делаю совершенно неправильно?
Заранее спасибо.
Войдите в свой аккаунт GMAIL , затем нажмите на изображение в верхнем правом углу. Нажмите «Моя учетная запись», затем нажмите «Войти» и «Безопасность» и прокрутите страницу вниз, пока не увидите «Разрешить менее безопасные приложения:», включите это. Вы сможете продолжить работу с вашим Rails-приложением. – sahil
@sahil Спасибо, но все та же проблема .. – Edgars