tutorial - Laravel 4 Auth con Facebook(sin autenticación de contraseña)
scotch laravel socialite (2)
Debes implementar UserInterface en tu modelo para que Auth funcione correctamente
use Illuminate/Auth/UserInterface;
class Fan extends Eloquent implements UserInterface{
...
public function getAuthIdentifier()
{
return $this->getKey();
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}
}
getAuthIdentifier y getAuthPassword son métodos abstractos y deben implementarse en su clase implementando UserInterface
Estoy tratando de configurar un sistema de autenticación con Laravel 4 con un inicio de sesión de Facebook. Estoy usando el paquete madewithlove / laravel-oauth2 para Laravel 4.
Por supuesto, no hay una contraseña para agregar a mi base de datos cuando un usuario inicia sesión con Facebook. Sin embargo, estoy tratando de verificar si ya hay una identificación de usuario en la base de datos para determinar si debo crear una nueva entidad o simplemente iniciar sesión en la actual. Me gustaría usar los comandos Auth para hacer esto. Tengo una mesa llamada "fanáticos".
Esto es con lo que estoy trabajando:
$fan = Fan::where(''fbid'', ''='', $user[''uid'']);
if(is_null($fan)) {
$fan = new Fan;
$fan->fbid = $user[''uid''];
$fan->email = $user[''email''];
$fan->first_name = $user[''first_name''];
$fan->last_name = $user[''last_name''];
$fan->gender = $user[''gender''];
$fan->birthday = $user[''birthday''];
$fan->age = $age;
$fan->city = $city;
$fan->state = $state;
$fan->image = $user[''image''];
$fan->save();
return Redirect::to(''fans/home'');
}
else {
Auth::login($fan);
return Redirect::to(''fans/home'');
}
Modelo de ventilador:
<?php
class Fan extends Eloquent {
protected $guarded = array();
public static $rules = array();
}
Cuando ejecuto esto, obtengo el error:
Argument 1 passed to Illuminate/Auth/Guard::login() must be an instance of Illuminate/Auth/UserInterface, instance of Illuminate/Database/Eloquent/Builder given
EDITAR: Cuando uso: $fan = Fan::where(''fbid'', ''='', $user[''uid''])->first();
Me sale el error:
Argument 1 passed to Illuminate/Auth/Guard::login() must be an instance of Illuminate/Auth/UserInterface, null given, called in /Applications/MAMP/htdocs/crowdsets/laravel-master/vendor/laravel/framework/src/Illuminate/Auth/Guard.php on line 368 and defined
No sé por qué me está dando este error. ¿Tiene sugerencias sobre cómo puedo hacer que esto funcione? Gracias por tu ayuda.
Para iniciar sesión con cualquier usuario en el sistema, debe usar el modelo de User
, y apuesto a que las clases heredadas también harán el truco, pero no estoy seguro.
De todos modos, su modelo de Fan
no se asocia con el modelo / tabla de User
de ninguna manera y eso es un problema. Si su modelo tenía una relación belong_to
o has_one
y un campo user_id
, entonces podría reemplazar Auth::login($user)
con Auth::loginUsingId(<some id>)
.
Respuesta original:
Falta una llamada a un método adicional: ->get()
o ->first()
para recuperar realmente los resultados:
$fan = Fan::where(''fbid'', ''='', $user[''uid''])->first();
Alternativamente, puede lanzar una excepción para ver qué está pasando:
$fan = Fan::where(''fbid'', ''='', $user[''uid''])->firstOrFail();
Si ve diferentes errores, actualice su pregunta con esos errores.