Witam
Jestem świeżakiem w rails'ach i napotkałem problem, z logowaniem do usług google. Mianowicie przy logowaniu nie dostaję w request.env omniauth.auth. Dodam, że powinna istnieć tam taka zmienna. Wszelkie kursy i dokumentacja zakładają zawsze obecność takiej zmiennej tymczasem u mnie jej nie ma.
Fragment Gemfile
gem 'google-api-client', '0.7.1', require: 'google/api_client'
gem 'omniauth', '1.2.1'
gem 'omniauth-google-oauth2', '0.2.4'
config/initializers/omniauth.rb
OmniAuth.config.full_host = 'http://localhost:3000'
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2,
'CLIENT_ID od googla',
'CLIENT_SECRET od googla',
{
approval_prompt: 'force',
scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar',
redirect_url: 'http://localhost:3000/auth/google-oauth/callback'
}
end
Controler
class GoogleAuthController < ApplicationController
def create
#request.env['omniauth.auth'] <- zawsze zwraca mi nil
@auth = request.env['omniauth.auth']
unless @auth.nil?
#export danych do google calendar
else
flash[:danger] = 'Error during connection with Google API.'
redirect_to root_path
end
end
end
Włączone odpowiednie API.
Dodam, że nie interesuje mnie łaczenie kont z kontami google (może ew. przechowywać klucz aktualnej sesji googla aby nie musiał sie człowiek 3 razy logowac jak chce exportować dane).
Rails 4.0.4 Ruby 2.0.0p481
Z góry dziękuję za pomoc.
Pozdrawiam
EDIT: Problem rozwiązany.
Zamieniłem w omniauth.rb
{ :access_type => 'offline', :prompt => 'consent', :approval_prompt => 'force', :scope => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar', :redirect_uri => 'http://localhost:3000/auth/google-oauth2/callback', }
na
{ access_type: 'offline', prompt: 'consent', approval_prompt: 'force', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar', }
i zadziałało.