设计/全身份验证 - 找不到操作'facebook'



我正试图按照指南在我的应用程序中实现facebook身份验证

我已经完成了所有步骤,但在登录后出现以下错误。

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

我已经在controllers/users中创建了文件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

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

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

您所在的位置:

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

看到区别了吗?

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

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

然后运行rails db:migrate

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

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

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

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

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

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

最新更新