9

Laravel の Auth クラスを試していますが、ユーザーにログインしようとするたびに、メソッドは false を返します。これが私のコードです:

Routes.php

Route::get('new-user', function() {
    return View::make('register');
});

Route::post('new-user', function() {
    $name = Input::get('name');
    $email = Input::get('email');
    $password = Hash::make(Input::get('password'));

    $user = new User;
    $user->name = $name;
    $user->email = $email;
    $user->password = $password;

    $user->save();
});    

Route::get('login', function() {
        return View::make('login');
    });

    Route::post('login', function() {

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

        if (Auth::attempt($user)) {
            //return Redirect::intended('dashboard');
            return "ok.";
        } else {
            return "Wrong.";
        }

    });

ビュー/login.blade.php

{{ Form::open(array('url' => 'login', 'method' => 'post')) }}

    <h1>Login:</h1>

    <p>
        {{ Form::label('email', 'Email: ') }}
        {{ Form::text('email') }}<br />

        {{ Form::label('password', 'Password: ') }}
        {{ Form::password('password') }}<br />
    </p>

    <p>
        {{ Form::submit('Login') }}
    </p>

{{ Form::close() }}

config/auth.php

return array(

    'driver' => 'eloquent',
    'model' => 'User',
    'table' => 'users',
    'reminder' => array(
        'email' => 'emails.auth.reminder', 'table' => 'password_reminders',
    ),

);

データベースには電子メールとパスワードのフィールドがあり、パスワード フィールドは varchar(60) です。ログイン情報を /login に送信するたびに、「間違っています」と返されます。ここで何が悪いのか本当にわかりませんか?

4

5 に答える 5

6

に間違った変数を渡しているため、コードがバグっていますAuth::attempt()。このメソッドには、キーのユーザー名、パスワード、およびオプションで記憶する配列が必要です。その観点から、上記のコードは次のようになります。

Route::post('login', function()
{
    $credentials = [
        'username' => Input::get('email'),
        'password' => Input::get('password')
    ];

    dd(Auth::attempt($credentials));
});

それが役立つことを願っています。

また、ワークフローを改善するための追加コードのスニペットも提供します。新しいユーザーを保存するためのルート:

Route::post('register', function()
{
    $input = Input::only(['username', 'email', 'password']);

    // validate data

    Eloquent::unguard();

    $user = User::create($input);

    Auth::loginUsingId($user->id);

    return Redirect::to('dashboard');
});

次に、ユーザーモデルにメソッドを追加します

public function setPasswordAttribute()
{
    $this->password = Hash::make($this->password);
}

このようにして、パスワードは設定されるたびに自動的にハッシュされます

于 2013-06-17T06:37:27.433 に答える
5

試行する前にパスワードをハッシュしない:

    $user = array(
        'email' => Input::get('email'),
        'password' => Input::get('password')
    );

    if (Auth::attempt($user)) {
        //return Redirect::intended('dashboard');
        return "ok.";
    } else {
        return "Wrong.";
    }
于 2013-06-14T15:17:36.220 に答える
0

パスワードの長さを確認してください。データベースで 60 以上である必要があります。

于 2014-11-14T14:55:23.380 に答える