rails google ruby-on-rails facebook devise

ruby-on-rails - rails devise google



Devise+Omniauth: método indefinido `user_omniauth_authorize_path '' (2)

He estado siguiendo la guía de integración de omniauth + idee para facebook y sigo recibiendo este error cuando hago clic en el enlace para iniciar sesión con el enlace de Facebook.

método undefined user_omniauth_authorize_path para #<#<Class:0x0000000253a550>:0x000000035ea490>

He verificado el código en la guía y no puedo entender cuál es el problema. Mi gemfile:

source ''https://rubygems.org'' gem ''sendgrid'' gem ''omniauth-facebook'' gem ''gravatar'' gem ''will_paginate'' gem ''faker'' gem ''devise'' # Bundle edge Rails instead: gem ''rails'', github: ''rails/rails'' gem ''rails'', ''4.2.6'' # Use postgresql as the database for Active Record gem ''pg'', ''~> 0.15'' # Use SCSS for stylesheets gem ''sass-rails'', ''~> 5.0'' # Use Uglifier as compressor for JavaScript assets gem ''uglifier'', ''>= 1.3.0'' # Use CoffeeScript for .coffee assets and views gem ''coffee-rails'', ''~> 4.1.0'' # See https://github.com/rails/execjs#readme for more supported runtimes # gem ''therubyracer'', platforms: :ruby # Use jquery as the JavaScript library gem ''jquery-rails'' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks gem ''turbolinks'' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem ''jbuilder'', ''~> 2.0'' # bundle exec rake doc:rails generates the API under doc/api. gem ''sdoc'', ''~> 0.4.0'', group: :doc # Use ActiveModel has_secure_password # gem ''bcrypt'', ''~> 3.1.7'' # Use Unicorn as the app server # gem ''unicorn'' # Use Capistrano for deployment # gem ''capistrano-rails'', group: :development group :development, :test do # Call ''byebug'' anywhere in the code to stop execution and get a debugger console gem ''byebug'' end group :development do # Access an IRB console on exception pages or by using <%= console %> in views gem ''web-console'', ''~> 2.0'' gem ''letter_opener'' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem ''spring'' end

OmniauthCallbacksController:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook @user = User.from_omniauth(request.env["omniauth"]) if @user.persisted? sign_in_and_redirect @user, :event => :authentication 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 def failure redirect_to root_path end end

Modelo de usuario:

class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook] has_many :likings, dependent: :destroy has_many :comments, dependent: :destroy has_many :posts, dependent: :destroy has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :followers, through: :passive_relationships, source: :follower def feed Post.where("user_id IN (?) OR user_id = ?", following_ids, id) end # follows user def follow(other_user) active_relationships.create(followed_id: other_user.id) end # unfollows user def unfollow(other_user) active_relationships.find_by(followed_id: other_user.id).destroy end def following?(other_user) following.include?(other_user) end def self.from_omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_create do |user| user.email = auth.info.email user.password = Devise.friendly_token[0,20] end end end


Intente ejecutar rutas de rake y vea cuáles son los caminos para omniauth. Creo que han cambiado con la versión más reciente del dispositivo. Intenta cambiar

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>

a

<%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %>

y mira si eso funciona para ti.

Aparentemente los ayudantes para las rutas de omniauth han cambiado desde que el comando de rutas de rastreo para mí regresó

user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format) omniauth_callbacks#passthru

y no como lo fue hace algunos meses cuando comencé el proyecto.

user_omniauth_authorize GET|POST /users/auth/facebook(:provider) omniauth_callbacks#passthru

También debes cambiar la línea

@user = User.from_omniauth(request.env["omniauth"])

a

@user = User.from_omniauth(request.env["omniauth.auth"])

Esto es lo que funcionó para mí, espero que esto ayude.


Puede que no sea la respuesta que la gente está buscando, pero siempre puedes simplemente especificar una versión anterior de la gema de diseño en tu Gemfile.

gem ''devise'', ''~> 4.1.1''

Esto anuló mi sitio de producción y tuve que actuar rápido. Esto funcionó.