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

Mar*_*ark 1 laravel eloquent laravel-4

我有一个基本的laravel 4应用程序,允许有人注册然后登录.我试图这样做,以便当用户成功完成注册时,他们会自动登录.我收到一个错误异常'传递给Illuminate的声明1\Auth\Guard :: login()必须是Illuminate\Auth\UserInterface的实例,User的实例'.我明白这意味着传递给login方法的第一个参数不正确但我不明白为什么当laravel文档说使用时它不正确

$user = User::find(1);

Auth::login($user);
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

<?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();
            }
        }

    }
?>
Run Code Online (Sandbox Code Playgroud)

fid*_*per 5

我可以想到一些场景:

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

尝试:

$user = User::create(array(
            'username'=>Input::get('username'),
            'password'=>Hash::make(Input::get('password'))
        ));

Auth::login($user);
Run Code Online (Sandbox Code Playgroud)

如果仍然出现错误,则可能$user不是User对象,因为未成功创建用户.

  • 选项一,我愚蠢地没有阅读安全文档的第一段我直接跳到身份验证部分.我只是让用户模型看起来与教程中的模型完全相同,而且不是一个好主意 (2认同)