2013-09-24 4 views
0

Я использую google oauth2, когда я вхожу в систему с помощью Google, после того как я выбрал свою учетную запись и нажал, введите эту ошибку.AbstractController ActionNotFound для отказов rails 3 using google oauth2

AbstractController::ActionNotFound at /users/auth/google_oauth2/callback 
The action 'failure' could not be found for OmniauthCallbacksController 

Я так в тупике! Что я делаю неправильно?

контроллер для OmniAuth

class OmniauthCallbacksController < ApplicationController 
    def google_oauth2 
     auth_details = request.env["omniauth.auth"] 
     if auth_details.info['email'].split("@")[1] == "company.net" 
      user = User.from_omniauth(request.env["omniauth.auth"]) 
      if user.persisted? 
       flash.notice = "Signed in Through Google!" 
       sign_in_and_redirect user 
      else 
       session["devise.user_attributes"] = user.attributes 
       flash.notice = "Please provide a password" 
       redirect_to new_user_registration_url 
      end 
     else 
      render :text => "Sorry this site is for company employees only" 
     end 
    end 
end 

в инициализаторы/devise.rb я есть требования к config.omniauth

Трассировка

the error show this process actionpack-3.2.13/lib/abstract_controller/base.rb 

и это линия он выделяет

unless action_name = method_for_action(action_name) 
    raise ActionNotFound, "The action" '#{action}' could not be found for #{self.class.name}" 
end 
+0

Пожалуйста, покажите следовые. –

+0

Привет, что такое трассировка? Спасибо –

+0

Наоми, обратная ошибка ошибки. На экране нет метода отказа, и я не знаю, какой код его назвал. –

ответ

1

Я вижу. Метод failure должен принадлежать контроллеру Devise. Вы не наследовали контроллер от Devise, а ApplicationController, чтобы этот метод не был найден.

Поскольку вы используете Omniauth на основе Devise, этот контроллер должен наследовать от Devise's.

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 

Или лучше, добавьте имена пользователя, потому что контроллер находится в «приложении/контроллерах/users`

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
+0

Большое спасибо! как я могу внести изменения, нужно ли мне мигрировать? или я могу сделать это вручную? –

+0

Для версии, отличной от имен, вам просто нужно переименовать контроллер, вот и все. Для пространств имен вам нужно изменить имя и определить маршруты, если вы не сделали этого: 'devise_for: user, controller: {omniauth_callbacks: 'users/omniauth_callbacks'}'. Не требуется миграции, так как это для контроллера. –

+0

Я использовал версию с именами Когда я это делаю, я получаю неинициализированную константу. Пользователи знают, почему это может случиться? –

Смежные вопросы