2013-07-02 3 views
2

Я пытаюсь настроить систему аутентификации с Laravel 4 с помощью входа в систему Facebook. Я использую пакет madewithlove/laravel-oauth2 для Laravel 4.Laravel 4 Auth с Facebook (нет аутентификации пароля)

Конечно, нет пароля для добавления в мою базу данных при входе пользователя в систему с помощью Facebook. Тем не менее, я пытаюсь проверить, есть ли идентификатор пользователя в базе данных, чтобы определить, должен ли я создать новый объект или просто войти в текущий. Я хотел бы использовать команды Auth для этого. У меня есть таблица под названием «фанаты».

Это то, что я работаю с:

$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'); 

       } 

вентилятора Модель:

<?php 

class Fan extends Eloquent { 
    protected $guarded = array(); 

    public static $rules = array(); 
} 

Когда я запускаю это, я получаю ошибку:

EDIT: Когда Я использую: $fan = Fan::where('fbid', '=', $user['uid'])->first();

Я получаю сообщение об ошибке:

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 

Я не знаю, почему это дает мне эту ошибку. У вас есть предложения о том, как я могу это сделать? Спасибо за помощь.

+0

вы можете показать свой код для класса Fan ?? –

+0

Код модели вентилятора добавлен. – user1072337

+0

Ошибка объясняет все это ... вы расширяете свою модель вентилятора, чтобы использовать Eloquent, где, как и для Auth, вы должны также реализовать UserInterface, RemindableInterface –

ответ

4

Вы должны реализовать пользовательский интерфейс для вашей модели для Auth, чтобы работать должным образом

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 и getAuthPassword абстрактен метод и должны быть реализован в вас классе, реализующего пользовательского интерфейс

+0

У вас также есть идея по этой проблеме? http://stackoverflow.com/questions/21506327/laravel-facebook-login-missing-email – patrick

0

Чтобы войти в систему для любого пользователя, вам необходимо использовать модель User, и я бы поставил унаследованные классы, чтобы сделать трюк, но я не уверен.

Во всяком случае, ваша модель Fan никак не связана с моделью/таблицей User, и это проблема. Если ваша модель имела отношение belong_to или has_one и поле user_id, то вы можете заменить Auth::login($user) на Auth::loginUsingId(<some id>).


Оригинальный ответ:

Вы пропускаете дополнительный вызов метода: ->get() или ->first() на самом деле получить результаты:

$fan = Fan::where('fbid', '=', $user['uid'])->first(); 

В качестве альтернативы, вы можете бросить исключение, чтобы увидеть, что происходит :

$fan = Fan::where('fbid', '=', $user['uid'])->firstOrFail(); 

Если вы видите разные ошибки, обновите свой вопрос с помощью этих ошибок.

+0

Я пробовал это так, и это просто дало мне другую, но похожую ошибку. – user1072337

+0

обновлен с новой ошибкой – user1072337

+0

Странно, вы проверяете нулевые значения, но все же вы получили ошибку о нулевом значении –