使用Auth :: login时,Laravel 4 arg1必须是UserInterface的实例

时间:2013-09-11 23:12:13

标签: laravel laravel-4 eloquent

我有一个基本的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();
            }
        }

    }
?>

2 个答案:

答案 0 :(得分:5)

我可以想到一些场景:

  1. 您没有使用带有全新Laravel安装的User模型(听起来不太可能,但实现了UserInterface,如果您编辑或创建了一个,那么您可能不会新的)。
  2. User::create()未成功调用(未成功创建用户)
  3. $user = User::where()->...未导致结果
  4. 尝试:

    $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 {