OAuth2で実行しているFacebookログインがあり、Laravel 4の組み込み認証システムを使用して、再訪問時にユーザーを再度ログインさせています。大多数のユーザーについては、私が持っているものに問題はありませんが、あるユーザーについては、ログイン時に次のエラーが表示されるのを見ています:
ErrorException
Argument 1 passed to Illuminate\Auth\Guard::login() must implement interface Illuminate\Auth\UserInterface, null given
open: */nfs/c09/h04/mnt/139243/domains/crowdsets.com/vendor/laravel/framework/src/Illuminate/Auth/Guard.php
* /**
* Log a user into the application.
*
* @param \Illuminate\Auth\UserInterface $user
* @param bool $remember
* @return void
*/
public function login(UserInterface $user, $remember = false)
{
$id = $user->getAuthIdentifier();
コントローラーの関連するログイン/認証コードは次のとおりです。
$check = Fan::where('fbid', '=', $user['uid'])->first();
if(is_null($check)) {
$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_abbrev;
$fan->image = $user['image'];
$fan->friend_ids_url = $user['friends'];
$fan->friend_ids_unpacked = $friend_ids;
$fan->save();
$new = Fan::where('fbid', '=', $user['uid'])->first();
Auth::login($new);
return Redirect::to('fans/home');
}
else {
Auth::login($check);
$fan = Fan::find(Auth::user()->id);
$fan->image = $user['image'];
$fan->save();
return Redirect::to('fans/home');
var_dump($user);
}
これは、「ファン」と呼ばれるユーザー情報を保持するために使用しているテーブルのモデルのコードです。
<?php
use Illuminate\Auth\UserInterface;
class Fan extends Eloquent implements UserInterface {
protected $guarded = array();
public static $rules = array();
public function getAuthIdentifier()
{
return $this->getKey();
}
public function getAuthPassword()
{
return $this->password;
}
このログインは、私が試した他のすべてのプロファイルで機能するため、これは非常に困惑しています。このエラーがスローされるのは、この友人のプロファイルのみです。また、ログイン(または再試行)時に、データベース/テーブルにこのユーザーの複数のエントリが作成されることも追加します。この認証システムは、まさにこれを防ぐために設定されているはずです。足りないものはありますか?