2016-07-17 2 views
4

Я создал новое приложение Rails 5 с rails new appname --api, которое кажется отличным! Я хочу использовать его в качестве backend для интерфейса с React и со временем в приложении Chrome. На данный момент я хочу создать API.Получение ошибки OmniAuth :: NoSessionError с Rails 5 API

Я использовал следующие драгоценные камни

  • Gem 'OmniAuth'
  • Gem 'OmniAuth-OAuth2'
  • камень 'изобрести'
  • камень 'devise_token_auth', мерзавец: «мерзавец: // github.com/lynndylanhurley/devise_token_auth.git»
  • камень 'OmniAuth-твиттер'
  • камень 'OmniAuth-facebook'
  • камень 'OmniAuth-Google-oauth2'

И я следовал указаниям на их Github и здесь, чтобы сделать установку: http://www.developingandrails.com/2015/02/api-authentication-with-devisetokenauth.html

И теперь, когда я запустить приложение я получаю:

Started GET "/" for 14.144.15.10 at 2016-07-17 17:21:46 +0000 
    ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" 
OmniAuth::NoSessionError (You must provide a session to use OmniAuth.): 

Я искал ответы на Github и StackOverflow, но никто, кажется, не имеет решения.

Единственное, что, кажется, «исправить» проблема добавления этого:

# config/application.rb 
config.middleware.use Rack::Session::Cookie 

Но это «решение» дает мне эту ошибку в консоли:

SECURITY WARNING: No secret option provided to Rack::Session::Cookie. 
     This poses a security threat. It is strongly recommended that you 
     provide a secret to prevent exploits that may be possible from crafted 
     cookies. This will not be supported in future versions of Rack, and 
     future versions will even invalidate your existing user cookies. 

Пожалуйста, помогите! Благодарю.

ответ

3

Не совсем уверен, но что-то, что работает для меня в проекте:

#config/application.rb 
    config.middleware.insert_after(ActiveRecord::QueryCache, ActionDispatch::Cookies) 
    config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore) 
+0

Не работал для меня. Я получил 'Нет такого промежуточного программного обеспечения для вставки после: ActiveRecord :: QueryCache (RuntimeError)' – crentist

+0

комментирует 'config.middleware.insert_after (ActiveRecord :: QueryCache, ActionDispatch :: Cookies)' then. – oreoluwa

+0

Это исправило ошибку «БЕЗОПАСНОСТЬ ПРЕДУПРЕЖДЕНИЯ», которую я получал! Хотя я беспокоюсь, что это делает его небезопасным, и я немного начинаю. Спасибо за вашу помощь! – crentist

5

К сожалению, OmniAuth требует rack.session присутствия, чтобы сохранить некоторые данные между запросом к поставщику и запрос обратного вызова.

https://github.com/omniauth/omniauth/blob/master/lib/omniauth/strategy.rb#L173

Для OmniAuth с Rails API должен вернуть сессию MiddleWare стека:

config.middleware.insert_after ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies 
config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore 
+0

Как насчет 'insert_before' OmniAuth? –

2

Хотя config.middleware.insert_after работал для меня, то же промежуточного слоя не был загружен, поэтому я должен был вставить выбрать что-то другое вставить его после. Я нашел подобный ответ в http://stackoverflow.com/questions/15342710/adding-cookie-session-store-back-to-rails-api-app и просто добавил:

config.middleware.use ActionDispatch::Cookies 
config.middleware.use ActionDispatch::Session::CookieStore 

в application.rb.