Rails3 CMS комфортно-мексиканский диван получит несоответствующую маршрутизацию с помощью omniauth - PullRequest
2 голосов
/ 25 июля 2011

Я интегрировал удобный мексиканский диван CMS с моим приложением Rails 3.0.9 с поддержкой omniauth 0.2.6.

Все отлично работает на стороне блога.Я могу войти в cms-admin, работать с консолью администратора, сделать сообщение и выйти (у cms-admin есть своя собственная система аутентификации, отличная от моего приложения ...), чем я могу просмотреть новый пост.

Проблема в том, что остальная часть моего приложения аутентифицирует пользователей с помощью omniauth, и когда я выхожу из системы, я получаю следующую ошибку:

Started GET "/auth/github" for 127.0.0.1 at 2011-07-25 21:04:46 +0200
  Processing by CmsContentController#render_html as HTML
  Parameters: {"cms_path"=>"auth/github"}
  SQL (0.3ms)  SELECT COUNT(*) FROM "cms_sites"
  Cms::Site Load (0.3ms)  SELECT "cms_sites".* FROM "cms_sites" LIMIT 1
Completed 500 Internal Server Error in 156ms

NoMethodError (undefined method `gsub!' for nil:NilClass):

Мой Gemfile.lock здесь: http://pastie.org/2270005

Любая помощь будет принята с благодарностью.Лука Дж. Соаве

1 Ответ

5 голосов
/ 26 июля 2011

Это была проблема маршрутизации.

Omniauth работает, обнаруживая страницу ошибки 404:

если он совпадает с маршрутом / auth /: провайдера, то он ловит запрос и отправляет его провайдеру

... но удобно-мексиканский диван cms (например, НПЗ и другие), имеет перехват всех маршрутов, поэтому запрос никогда не возвращал ошибку 404, которая Всемогущий мог обнаружить.

В удобном чехле для мексиканского дивана он проходит через "cms_path"=>"auth/github", получая

NoMethodError in CmsContentController#render_html
undefined method `gsub!' for nil:NilClass

вместо правильного пути omniauth, который должен выглядеть следующим образом:

Started GET "/" for 127.0.0.1 at 2011-07-25 22:27:26 +0200
  Processing by HomeController#index as HTML
Rendered home/index.html.haml within layouts/application (29.5ms)
Completed 200 OK in 44ms (Views: 42.8ms | ActiveRecord: 0.0ms)


Started GET "/auth/github" for 127.0.0.1 at 2011-07-25 22:27:35 +0200
MONGODB gitwatch_dev['users'].find({:provider=>"github", :uid=>1573})


Started GET "/auth/github/callback?code=4334bab983hd5fec19dd" for 127.0.0.1 at 2011-07-25 22:27:36 +0200
  Processing by SessionsController#create as HTML
  Parameters: {"code"=>"4334bab983hd5fec19dd", "provider"=>"github"}
Redirected to http://localhost:3001/
Completed 302 Found in 255ms
MONGODB gitwatch_dev['users'].find({:_id=>BSON::ObjectId('4e23114b1d41c80f180005b2')})


Started GET "/" for 127.0.0.1 at 2011-07-25 22:27:39 +0200
  Processing by HomeController#index as HTML
Rendered home/index.html.haml within layouts/application (415.6ms)
Completed 200 OK in 890ms (Views: 428.6ms | ActiveRecord: 0.0ms)

Решение в моем случае выглядит следующим образом:

в приложении / controllers / errors_controller.rb

class ErrorsController < ApplicationController
  def error
    render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
  end
end

в config / rout.rb добавить внизу

match '/auth/:provider' => 'errors#error'

... после последнего маршрута Omniouth

`match "/auth/:provider/callback" => "sessions#create"`

спасибо идет Federico Gonzalez и Олегу Хабарову

Надеюсь, это поможет кому-то еще; -)

пока Лука Дж. Соаве

...