Ошибка аутентификации Omniauth в Rails 4

Я работаю на рельсах 4 и пытаюсь пройти аутентификацию с помощью github. Итак, в моем приложении Github у меня есть это:

URL-адрес: http://локальный:4000

URL обратного вызова: http://localhost:4000/auth/github/callback

URL-адрес обратного вызова — это URL-адрес, который Github попытается получить, когда аутентификация будет выполнена правильно?

Итак, почему я получаю ошибку Github page 404, когда нажимаю на свою ссылку:

<%= link_to 'Sign in with Github', '/auth/github' %>

Я работаю над средой разработки localhost, так что может быть проблема?

Также, когда я набираю http:// localhost:4000/auth/github/callback в своем браузере, я получаю OmniAuth::Strategies::OAuth2::CallbackError

Зачем? У меня есть это в моих маршрутах.rb

post 'auth/:provider/callback' => 'home#index'

Есть ли ошибки в Rails 4 и Omniauth? (добавлено место в localhost, поэтому stackoverflow принимает мой пост)


person Trt Trt    schedule 28.01.2013    source источник


Ответы (2)


У меня есть github, работающий с драгоценным камнем omniauth-github и файлом config/initializers/omniauth.rb, содержащим

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
end

Однако, когда я ввожу http://localhost:3000/auth/github/callback в своем браузере, я также получаю OmniAuth::Strategies::OAuth2::CallbackError, так что это не должно быть проблемой.

Мой config/environment.rb выглядит так

# Load the rails application
require File.expand_path('../application', __FILE__)

# Load the app's custom environment variables here, so that they are loaded before environments/*.rb
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
load(app_environment_variables) if File.exists?(app_environment_variables)

...

а мой config/app/environment_variables.rb выглядит так

# OAuth Keys and Secrets
if Rails.env.production?
  ENV['GITHUB_KEY'] = 'd1234a3a123a1a3a123c'
  ENV['GITHUB_SECRET'] = '1234azer123azer1231209jeunsghezkndaz1234'
else
  ENV['GITHUB_KEY'] = 'qsflkjkj685bg554456b'
  ENV['GITHUB_SECRET'] = 'qslkfj7757kqfmlsdh675hlfsd587kjfdh687jsd'
end

См. Возможно ли установить переменные ENV для среды разработки rails в моем коде? подробнее об этом. У меня есть 2 приложения, зарегистрированные на github. Один app_name-dev с ключом qsflk..., URL http://localhost:3000 и URL обратного вызова http://localhost:3000/auth/github/callback и один app_name с ключом d1234a....

Проверьте, правильно ли вы это сделали. Может быть, попробовать изменить localhost на 127.0.0.1.

person Benoît Legat    schedule 13.02.2013

Для меня это было новое более строгое соответствие URI Github, которое создавало 404 при попытке перенаправления на http://localhost:3000/auth/github/callback, я решил это, передав URI перенаправления в качестве параметра с Omniauth.

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], 
        :scope => 'user,public_repo', 
        :redirect_uri => ENV['GITHUB_REDIRECT']
end

Если вы используете Linux/Mac, вы можете добавить переменные среды из командной строки.

$ export GITHUB_REDIRECT=http://localhost:3000/auth/github/callback

В качестве альтернативы вы можете использовать что-то вроде Foreman, что позволит вам добавить файл .env, который вы можете использовать для сохраните свои переменные.

Просто не забудьте добавить соответствующий URI перенаправления в переменные вашей производственной среды, и все готово.

person nverba    schedule 02.11.2013