2

我不断得到

Unhandled Exception
Message:

Class 'User' not found

Location:

C:\wamp\www\laravel\laravel\auth\drivers\eloquent.php on line 70

当我登录用户时。我认为eloquent.php 没有任何问题。请看一下我的登录控制器

class Login_Controller extends Base_Controller {

    public $restful = true;

    public function get_index(){
        return View::make('login');
    }

    public function post_index(){

        $username = Input::get('username');
        $password = Input::get('password'); 
        $user_details = array('username' => $username, 'password' => $password);

        if ( Auth::attempt($user_details) )
        {
            return Redirect::to('home.index');
        }
        else
        {
            return Redirect::to('login')
                ->with('login_errors', true);
        }


    }
}

这是登录视图:

{{ Form::open('login') }}
    <!-- username field -->
    <p>{{ Form::label('username', 'Username') }}</p>
    <p>{{ Form::text('username') }}</p>
    <!-- password field -->
    <p>{{ Form::label('password', 'Password') }}</p>
    <p>{{ Form::password('password') }}</p>
    <!-- submit button -->
    <p>{{ Form::submit('Login', array('class' => 'btn btn-primary')) }}</p>
{{ Form::close() }}

routes.php

<?php

Route::controller(Controller::detect()); // This line will map all our requests to all the controllers. If the controller or actions don’t exist, the system will return a 404 response.
Route::get('about', 'home@about');


Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('login');
});

我使用 Eloquent 作为我的身份验证驱动程序。我尝试将其更改为 Fluent,但是在单击登录按钮后,它会return Redirect::to('login')->with('login_errors', true);在 else 语句中显示此行所产生的登录错误。

使用 Eloquent 时“用户”类有什么问题?

4

2 回答 2

4

迈克是对的,这是因为你没有用户模型,但还有更多......

laravel 搜索用户模型但没有找到它的行如下:

if ( Auth::attempt($user_details) )

发生这种情况是因为 Laravel 身份验证系统默认使用 eloquent 驱动程序。为了满足 Laravel 的要求,您需要一个名为“users”的数据库表,其中至少包含文本类型的“用户名”和“密码”列,并且在使用时间戳时可能还包含“created_at”和“updated_at”列,但您可以将其关闭。

\application\models\user.php

<?PHP 
class User extends Eloquent
{    
    public static $timestamps  = false; //I don't like 'em ;)
}
于 2013-04-04T08:32:04.487 回答
2

这实际上是对@Hexodus 响应的评论,但我没有必要的评论点。

例如,您实际上可以将用户身份验证命名为您想要的任何名称

  • 模型:Turtle
  • 桌子:turtles

但是您必须进入app\config\auth.php并更改'model' => '...'and'table' => '...'值才能使 Laravel 的身份验证起作用。

此外,根据 docs,您甚至不需要'username''password'在数据库中明确定义

if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
  return Redirect::intended('dashboard');
}

请注意,“电子邮件”不是必需选项,它仅用作示例。您应该使用与数据库中的“用户名”相对应的任何列名。Redirect::intended 函数会将用户重定向到他们在被身份验证过滤器捕获之前尝试访问的 URL。如果预期的目的地不可用,则可以为此方法提供后备 URI。

实际上,'email'在这种情况下被认为是'username'


编辑,因为我一开始遇到了麻烦,所以使用Auth::attempt(...).

于 2013-12-10T15:44:29.980 回答