2016-04-17 8 views
0

Я пытаюсь настроить новое приложение rails4.2 для аутентификации с Google Oauth2.Google oauth2 с разработкой и omniauth обработаны как сбой

Кажется, я успешно прошел процесс, но он рассматривается как сбой.

Первоначальные авторизации, похоже, идут хорошо, пока Google не отправит обратный вызов. Тогда это, кажется, неправильно идентифицировано как отказ.

Сообщение об ошибке получили в жизни: Could not authenticate you from Google because "Invalid credentials".

Я гугле для решения, но безрезультатно.

Возможно ли включить дополнительную регистрацию, чтобы понять, почему она выбирает процесс с помощью метода отказа?

Вот журнал запрос:

Started GET "https://stackoverflow.com/users/auth/google" for 127.0.0.1 at 2016-04-17 09:37:33 +0800 
Started GET "https://stackoverflow.com/users/auth/google/callback?state=<<state>>&code=<<code>>" for 127.0.0.1 at 2016-04-17 09:37:45 +0800 
Processing by Users::OmniauthCallbacksController#failure as HTML 
    Parameters: {"state"=>"<<state>>", "code"=>"<<code>>"} 
Redirected to http://test_app.dev/sign_in 
Completed 302 Found in 1ms (ActiveRecord: 0.0ms) 

При тестировании я нажал разрешить, когда Google побудил меня, и URL-адрес выглядит хорошо, так почему это обрабатывается, как если бы это был провал?

конфигурации/инициализатора/devise.rb

config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ['GOOGLE_CLIENT_SECRET'], 
     :strategy_class => OmniAuth::Strategies::GoogleOauth2, 
     :name => 'google', 
     :scope => 'email,profile,contacts', 
     :access_type => 'offline', 
     :image_aspect_ratio => 'square' 

routes.rb

devise_for :users, :controllers => { omniauth_callbacks: 'users/omniauth_callbacks' } 
    resources :users 

    devise_scope :user do 
    get 'sign_in', :to => 'devise/sessions#new', :as => :new_user_session 
    get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session 
    end 

контроллеры/пользователи/omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def google 
     logger.debug 'Omniauth callback called' # Never get's called 
    end 
end 

application_controller.rb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    # Direct to user profile after sign in 
    def after_sign_in_path_for(resource) 
    user_path(current_user) 
    end 

    # Needed by Devise when using omniauth 
    def new_session_path(scope) 
    new_user_session_path 
    end 
end 

Мои драгоценные камни:

Using warden 1.2.6 
Using devise 3.5.6 
Using oauth2 1.0.0 
Using omniauth 1.2.2 
Using omniauth-oauth2 1.4.0 
Using omniauth-google-oauth2 0.4.1 

ответ

1

Короткий ответ, потому что ваши кредитки не правы. Вы вызываете ENV в первом, но не во втором аргументе в своем хэш-конфигурации.

Лучший ответ - использовать лучшую мышеловку.

Иногда использование ENV для хранения ключей может быть проблематичным, у вас может не быть ключа, загруженного на том же терминале, на котором вы запустили свой сервер, или если вы находитесь в производстве, вы не сможете использовать его, чтобы узнать, что ENV знает что у него отсутствуют ключи. Легче использовать файл секретов. Это нормально, рельсы обеспечивают его именно по этой причине.

config/secrets.yml 

Вы можете сохранить любой ключ, который вы хотите там, в формате yml. УБЕДИТЕСЬ, что добавьте файл в свой .gitignore, потому что вы абсолютно не хотите хранить файл с секретными ключами в репо где-то. Вы должны вручную скопировать свой файл секретов на ваш производственный сервер.

development: 
    omniauth_provider_key: 13232423423242315 
    omniauth_provider_secret: 2222222222228eff721a0322c 
    domain_name: lvh.me 
    secret_key_base: 6ec9ae65d4de59aa1a7ssxxsdifwn9392203905c53a264ffd8255a601d7417b1ed7d4cef67f359e373472f0160aeb9698fa69578a1497b5b99209afd0e 

Вы также можете иметь ту же структуру для productionstaging или test

сейчас .. как только вы сделали это (созданный файл и добавил к нему свои ключи) Теперь вы можете вызвать ключ инициализатор

config.omniauth :google_oauth2, Rails.application.secrets.omniauth_provider_key, Rails.application.secrets.omniauth_provider_secret, 
    :strategy_class => OmniAuth::Strategies::GoogleOauth2, 
    :name => 'google', 
    :scope => 'email,profile,contacts', 
    :access_type => 'offline', 
    :image_aspect_ratio => 'square' 
+0

* Шляпы лба * Спасибо trh. Спасибо за информацию о secrets.yml, я не знал об этом, однако, я использую герою для производства, и быстрый поиск решений по героку, похоже, предлагает некоторые варианты включения ENV [...] в secrets.yml – ChristopherJ

+0

У всех нас есть наши дни :) Если вы заинтересованы в использовании секретов с herkou, то рассмотрите figaro - есть задача rake, rake figaro: heroku - он позволяет вам выполнить настройку, которую вы в противном случае сделали бы в системе с окр. --- https://github.com/laserlemon/figaro – trh

 Смежные вопросы

  • Нет связанных вопросов^_^