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

您必须在模型中实现 UserInterface 才能使 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 是抽象方法,必须在实现 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 回答