c9 ide, рабочая область Ubuntu, рельсы 4.2.10, ruby 2.4.0
При попытке использовать гем omniauth в режиме разработчика со стратегией разработчика, ссылка для входа в систему 'auth/developer'
успешно представляет форму пользователю. При отправке формы (где маршрут 'auth/developer/callback'
) генерируется эта ошибка:
ActionController::InvalidAuthenticityToken in SessionsController#create
Хотел бы иметь возможность использовать стратегию разработчика во время оставшейся части разработки приложения. Кажется, в документации не указано ничего, что необходимо для обратного вызова при использовании стратегии разработчика (в режиме разработки). Кажется, в документе есть хотя бы одно небольшое несоответствие, чего-то не хватает ??
Весь код работает правильно при использовании реальных провайдеров или в тестовом режиме с огурцом.
Вот часть кода инициализатора (не включая ключи / секреты), с которой я начал в config / initializers / omniauth.rb:
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :developer unless Rails.env.production?
provider :github, 'redacted,'redacted',
{ :name => "github", :scope => ['read:user','user:email']}
provider :facebook, 'redacted', 'redacted'
end
Gemfile включает в себя:
gem 'omniauth'
gem 'omniauth-github'
gem 'omniauth-facebook'
routes.rb:
match 'auth/:provider/callback', :to => 'sessions#create', :via => [:get, :post]
sessions_controller:
def create
begin
authenticator = Authentication.new(env["omniauth.auth"])
authenticator.disallow(session[:user_id]) if session?
authenticator.deny if authenticator.missing_information?
auth, message = authenticator.register_or_login
session[:user_id] = auth.user.id
etc.
приложение / контроллеры / sessions_controller / authentication.rb:
def initialize(omniauth)
# get Omniauth authentication hash
@auth_hash = omniauth
end
def auth_hash
@auth_hash
end
etc.
В случае успеха (с использованием других провайдеров или в тестовом режиме), обратный вызов должен быть снабжен действительным токеном, затем путь кода можно легко отследить с помощью метода create session_controller до конструктора класса Authenticator и т. Д.
В режиме разработки с использованием стратегии разработчика тело метода создания сеансов никогда не вводится вообще.
После получения действительного токена я должен увидеть такие сообщения:
"Welcome <name> You've signed up via <provider>."
Однако, поскольку ошибка возникает до этого момента, в выходных данных сервера можно увидеть только следующее:
Processing by SessionsController#create as HTML
Parameters: {"name"=>"Example User", "email"=>"example@user.com", "provider"=>"developer"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
actionpack (4.2.10) lib/action_controller/metal/request_forgery_protection.rb:181:in `handle_unverified_request'