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

マイクの言うとおりです。これは User モデルがないためですが、他にもあります...

laravel がユーザー モデルを検索して見つからない行は次のとおりです。

if ( Auth::attempt($user_details) )

これは、Laravels 認証システムがデフォルトで雄弁なドライバーを使用するために発生します。Laravelを満たすには、少なくともテキスト型の列「username」と「password」、およびタイムスタンプを使用する場合は列「created_at」と「updated_at」を持つ「users」という名前のデータベーステーブルが必要ですが、オフにすることができます。

\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

ただし、Laravel の認証が機能するためには、との値app\config\auth.phpを変更する必要があります。'model' => '...''table' => '...'

また、docs によると、データベースでそのように明示的に定義'username'する必要さえありません'password'

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

'email' は必須オプションではないことに注意してください。例として使用されるだけです。データベースの「ユーザー名」に対応する列名を使用する必要があります。Redirect::intended 関数は、認証フィルターによってキャッチされる前に、アクセスしようとしていた URL にユーザーをリダイレクトします。目的の宛先が使用できない場合に備えて、このメソッドにフォールバック URI を指定できます。

事実上、'email'この場合、'username'


編集してください。最初はこれに問題があったため、使用するときにパスワードをハッシュする必要はありませんAuth::attempt(...)

于 2013-12-10T15:44:29.980 に答える