I came across the same error. I missed the Facebook callback controller (app / controllers / users / omniauth_callbacks_controller.rb):
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController # ... def facebook respond_to do |format| format.html { @user = User.find_for_facebook(request.env["omniauth.auth"]) if @user.persisted? sign_in_and_redirect @user set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? else session["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url end } end end end
This code refers to the "find_for_facebook" method in my user model (app / models / user.rb):
class User < ActiveRecord::Base # ... def self.find_for_facebook(auth_hash) user = User.where(:email => auth_hash.info["email"]).first unless user user = User.create( username: auth_hash.info["nickname"], email: auth_hash.info["email"], password: Devise.friendly_token[0,20]) end user.provider = auth_hash["provider"] user.uid = auth_hash["uid"] user end end
Be sure to restart the development server so that all changes are received.
source share