我正在尝试在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
答案 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.rb
和gem '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"