11

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; 
}

このログインは、私が試した他のすべてのプロファイルで機能するため、これは非常に困惑しています。このエラーがスローされるのは、この友人のプロファイルのみです。また、ログイン(または再試行)時に、データベース/テーブルにこのユーザーの複数のエントリが作成されることも追加します。この認証システムは、まさにこれを防ぐために設定されているはずです。足りないものはありますか?

4

6 に答える 6

5

コードを次のようにリファクタリングしてみてください。

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

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_abbrev;
    $fan->image = $user['image'];
    $fan->friend_ids_url = $user['friends'];
    $fan->friend_ids_unpacked = $friend_ids;

    $fan->save();
} else {
    $fan->image = $user['image'];
    $fan->save();
}

Auth::loginUsingId($fan->getAuthIdentifier());
return Redirect::to('fans/home');
于 2013-09-29T21:05:48.260 に答える
2

簡単な質問と答え:
あなたのFanクラスはクラスを拡張User(または実装UserInterface) していますか?
そうでない場合、これを修正する最も簡単な方法は

class Fan extends User{
    ....
}
于 2013-09-27T08:05:03.900 に答える