0

Я установил авторизацию 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, он не работает?

Что может быть, что я делаю совершенно неправильно?

Заранее спасибо.

+1

Войдите в свой аккаунт GMAIL , затем нажмите на изображение в верхнем правом углу. Нажмите «Моя учетная запись», затем нажмите «Войти» и «Безопасность» и прокрутите страницу вниз, пока не увидите «Разрешить менее безопасные приложения:», включите это. Вы сможете продолжить работу с вашим Rails-приложением. – sahil

+0

@sahil Спасибо, но все та же проблема .. – Edgars

ответ

0

Найдено проблемы с моим кодом:

req = Net::HTTP::Post.new(url.request_uri) изменено на req = Net::HTTP::Get.new(url.request_uri)

и

@resbody = response в @resbody = response.body

Теперь я могу видеть, извлекаемые почту :)