devise / omniauth - 找不到动作'facebook'

时间:2012-07-14 11:10:36

标签: ruby-on-rails-3 devise omniauth

我正在尝试在this guide

之后的应用中实施Facebook身份验证

我已按照所有步骤操作,但在登录后遇到以下错误。

Unknown action

The action 'facebook' could not be found for Devise::OmniauthCallbacksController

我在控制器/用户中创建了omniauth_callbacks_controller文件。它定义了一个facebook方法。知道我应该怎么调试吗?


添加我的路线文件 -

Myapp::Application.routes.draw do
  get "static_pages/home"

  get "static_pages/help"

  get "static_pages/about"

  devise_for :users do
    resources :posts

  end

  root :to => 'static_pages#home'

  devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}
end

3 个答案:

答案 0 :(得分:15)

如果您查看指南,它会为您的路线文件指定此行:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

你有:

devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}

看到区别?

答案 1 :(得分:1)

我假设您的用户将能够登录和注销,编辑个人资料,在Facebook上注册或通过电子邮件注册,并且您也可以根据需要添加Confirmable进行设计。用户表中应该有额外的列。首先是将额外的字段添加到用户模型中。

rails g migration AddFieledsToUser provider:string uid:string image:string

然后运行rails db:migrate

检查您的用户表,确保您上面有这三列

我还假设您已经正确配置了初始化程序/devise.rb,如下所示:config.omniauth :facebook, 'APP_ID', 'APP_SECRET_KEY', scope: 'email', info_fields: 'email, name'在正确创建了Facebook应用之后。另外,假设您已成功根据宝石文件中的宝石omniauth_callbacks_controller.rbgem 'omniauth', '~> 1.6'创建并配置了gem 'omniauth-facebook', '~> 4.0'。只要确保您已完成所有这些步骤即可。

在您的route.rb中,您可以添加以下内容:

devise_for :users,
         path: '',
         path_names: {
           sign_in: 'login',
           sign_out: 'logout',
           edit: 'profile',
           sign_up: 'registration'
         },
         controllers: {
           omniauth_callbacks: 'omniauth_callbacks',
           registrations: 'registrations'
         }

我认为这是您错过的部分。您也可以根据需要命名路线。只是说。

答案 2 :(得分:0)

我在教程中遇到了类似的问题。检查大写 f在facebook中的用户/ omniauth_callbacks_controller.rb我使用的是资本" Facebook"但它正在寻找小写" facebook"