我有一个基本的laravel 4应用程序,允许某人注册然后登录。我试图这样做,以便当用户成功完成注册时,他们会自动登录。我收到一个错误异常'传递给Illuminate的声明1 \ Auth \ Guard :: login()必须是Illuminate \ Auth \ UserInterface的实例,User的实例'给出'。我理解这意味着传递给login方法的第一个参数不正确但我不明白为什么在laravel documentation说使用
时它不正确$user = User::find(1);
Auth::login($user);
这是我的控制器
<?php
Class UsersController extends BaseController {
public $restful = 'true';
protected $layout = 'layouts.default';
public function post_create()
{
$validation = User::validate(Input::all());
if ($validation->passes()) {
User::create(array(
'username'=>Input::get('username'),
'password'=>Hash::make(Input::get('password'))
));
$user = User::where('username', '=', Input::get('username'))->first();
Auth::login($user);
return Redirect::Route('home')->with('message', 'Thanks for registering! You are now logged in!');
}
else {
return Redirect::Route('register')->withErrors($validation)->withInput();
}
}
}
?>
答案 0 :(得分:5)
我可以想到一些场景:
User
模型(听起来不太可能,但实现了UserInterface
,如果您编辑或创建了一个,那么您可能不会新的)。User::create()
未成功调用(未成功创建用户)$user = User::where()->...
未导致结果尝试:
$user = User::create(array(
'username'=>Input::get('username'),
'password'=>Hash::make(Input::get('password'))
));
Auth::login($user);
如果仍然出现错误,$user
可能不是User
对象,因为用户未成功创建。
答案 1 :(得分:4)
确保您的User.php开始像..
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {