Вопрос

Я интегрировал Комфорта-мексиканский сосуд CMS с моими рельсами 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):

My Gemfile.lock здесь: http://pastie.org/2270005

Любая помощь будет оценена. Лука Г. Соав

Это было полезно?

Решение

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

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

Если он соответствует route /auth /: поставщику, то он поймает запрос отправляет его поставщику

... но Комфорта-мексиканский сосуд CMS (как Очистительный завод и другие), есть все маршрут, поэтому запрос никогда не возвращал ошибку 404, которую Omniauth мог обнаружить.

В случае с удобным имиканом "cms_path"=>"auth/github" получающий

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

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

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/routes.rb добавить внизу

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

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

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

Спасибо Federico Gonzalez и к Олег Хабаров

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

Пока, Лука Г. Солав

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top