我正在尝试使用带有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
我不知道为什么它会给我这个错误。你对我如何做这项工作有什么建议吗?谢谢您的帮助。
答案 0 :(得分: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的类中实现
答案 1 :(得分: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();
如果您发现不同的错误,请使用这些错误更新您的问题。