2

FacebookログインでLaravel 4で認証システムをセットアップしようとしています。Laravel 4 には madewithlove/laravel-oauth2 パッケージを使用しています。

もちろん、Facebook でユーザーがログインするときにデータベースに追加するパスワードはありません。ただし、ユーザー ID が既にデータベースにあるかどうかを確認して、新しいエンティティを作成するか、現在のエンティティにログインする必要があるかを判断しようとしています。これを行うために 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();
}

これを実行すると、次のエラーが表示されます。

Argument 1 passed to Illuminate\Auth\Guard::login() must be an instance of Illuminate\Auth\UserInterface, instance of Illuminate\Database\Eloquent\Builder given

編集:私が使用する場合:$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

なぜこのエラーが発生するのかわかりません。これを機能させる方法について提案はありますか?ご協力ありがとうございました。

4

2 に答える 2

4

Auth が適切に機能するには、モデルに UserInterface を実装する必要があります

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 は抽象メソッドであり、UserInterface を実装するクラスに実装する必要があります

于 2013-07-02T06:53:43.280 に答える
0

ユーザーがシステムにログインするには、モデルを使用する必要があります。User継承されたクラスも同じように機能すると思いますが、よくわかりません。

とにかく、モデルはモデル/テーブルFanとはまったく関連付けられていないため、問題があります。Userモデルにbelong_toorhas_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();

別のエラーが表示された場合は、それらのエラーで質問を更新してください。

于 2013-07-02T06:03:10.447 に答える