12

我正在尝试按照本指南在我的应用程序中实现 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
4

3 回答 3

17

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

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

你在哪里:

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

看到不同?

于 2012-07-14T15:22:40.870 回答
1

我假设您的用户将能够登录和注销、编辑个人资料、注册 facebook 或注册电子邮件,如果您愿意,您也可以添加 Confirmable 进行设计。您应该在用户表中有额外的列。就像首先在您的用户模型中添加额外的字段一样。

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

然后运行rails db:migrate

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

此外,我假设您已经正确配置了 initializers/devise.rb,如下所示:config.omniauth :facebook, 'APP_ID', 'APP_SECRET_KEY', scope: 'email', info_fields: 'email, name'在您正确创建了 facebook 应用程序之后。还假设您已经omniauth_callbacks_controller.rb根据 gemsgem 'omniauth', '~> 1.6'gem 'omniauth-facebook', '~> 4.0'gem 文件成功地创建和配置了您的。只要确保您已完成所有这些步骤。

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

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

我认为这是你错过的部分。您也可以随意命名路线。只是说。

于 2019-05-31T19:23:10.810 回答
0

我在教程中遇到了类似的问题。在 users/omniauth_callbacks_controller.rb 中检查 facebook 中 F 的大小写我使用的是大写的“Facebook”,但它正在寻找小写的“facebook”

于 2018-02-07T23:40:44.003 回答