OmniAuth / carriles - Usted tiene un objeto nulo cuando no lo esperas
-
11-10-2019 - |
Pregunta
Estoy recibiendo el siguiente error en mi aplicación Rails y no tengo ni idea de cómo ir sobre la depuración o la fijación de él:
NoMethodError en AuthenticationsController # crea
tiene un objeto nulo cuando no lo hizo ¡Esperar algo! Que podría haber esperado una instancia de ActiveRecord :: Base. los error ocurrió al evaluar nula. []
Rails.root: /Users/phil/Sites/travlrapp.com Aplicación de seguimiento | Marco de seguimiento | Traza completa ??p>
app / controllers / authentications_controller.rb: 15: en `Crear '
El controlador es la siguiente:
class AuthenticationsController < ApplicationController
def index
@authentications = current_user.authentications if current_user
end
def create
omniauth = request.env["omniauth.auth"]
unless omniauth
redirect_to authentications_url
flash[:notice] = "Could not authenticate via #{params['provider']}."
end
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, authentication.user)
elsif current_user
current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'], :token => omniauth['credentials']['token'], :secret => omniauth['credentials']['secret'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
else
user = User.new
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, user)
else
session[:omniauth] = omniauth.except('extra')
redirect_to new_user_registration_url
end
end
end
def destroy
@authentication = current_user.authentications.find(params[:id])
@authentication.destroy
flash[:notice] = "Successfully destroyed authentication."
redirect_to authentications_url
end
end
OmniAuth utiliza para trabajo fino, entonces me aplastó a tratar de permuta a un tenedor por pchilton que apoyó flickr. Hice esto mediante el establecimiento:. Git => en el Gemfile y tratar de volver a instalar, pero no soy yo seguro de que he hecho las cosas bien
Ahora he eliminado manualmente todos los archivos OmniAuth y gema foo OA e instalado por primera vez el estable actual (0.1.6) y la copia maestra git, pero todos los errores son los mismos.
realmente en una pérdida aquí, nadie que yo conozca tiene alguna idea de cuál es el problema.
Solución 3
Esto parecía para fijar de forma aleatoria en sí. Rieles Go!
Otros consejos
Es probable que omniauth
es nil
. Mientras que usted está mirando para nula con unless onmniauth
, la redirect_to
en realidad no detener el código del controlador por debajo de la ejecución.
Es posible que desee algo como esto:
unless omniauth
redirect_to authentications_url
flash[:notice] = "Could not authenticate via #{params['provider']}."
return
end
Ahora, usted todavía tiene que averiguar por qué omniauth
es nil
. Por eso, asegúrese de que está utilizando correctamente OmniAuth mirando el README . Se encamina a /auth/provider/callback
AuthenticationsController#create
?
Me disculpo de antemano si ya conoce este método (usted es un desarrollador de PHP después de todo).
¿El estilo de los carriles de soporte de depuración de PHP similar a die()
? Me he encontrado el error incomprensible raro como esto en ambos marcos php Yii y Kohana.
Lo que hago es poner una die('AAAAA')
al final de la acion controlador, y poco a poco moverlo hacia arriba hasta que se desencadena antes que el error, de esa manera sé exactamente en qué línea el error fue .
A continuación, me muevo en cualquier función que se llama en esa línea y empezar de nuevo.
No sé si carriles soportes este tipo de estilo de depuración prima. También sería de ayuda si el código fuente de esas joyas están en código noncompiled para que pueda insertar die()
por todo el lugar como ese.
Se podría hacer algo así como el equivalente de echo 'AAA'; exit;
o algo similar.
También existe también el 'cheque si una función se llama: die('BBBBB');
: P
Si quieres ir muy avanzado también hay
die("AAAAA ".' '.__FILE__.'::Line:'.__LINE__);