7

私は Laravel 4 Auth::attempt メソッドで作業するのに苦労しています。適切なドキュメントに従い、いくつかの SO スレッドを読んでいますが、まだ動作させることができません。

$userData = array('email' => 'admin@admin.com','password' => 'admin');
if(Auth::attempt($userData)){
    // redirect
}
else{
   echo 'Invalid';
}

そして、毎回 Invalid を返します

今、私は実際の理由が何であるかわかりません。

私のconfig/auth.phpには次のものがあります

<?php

   return array(
/*
|--------------------------------------------------------------------------
| Default Authentication Driver
|--------------------------------------------------------------------------
|
| This option controls the authentication driver that will be utilized.
| This drivers manages the retrieval and authentication of the users
| attempting to get access to protected areas of your application.
|
| Supported: "database", "eloquent"
|
*/

'driver' => 'eloquent',

/*
|--------------------------------------------------------------------------
| Authentication Model
|--------------------------------------------------------------------------
|
| When using the "Eloquent" authentication driver, we need to know which
| Eloquent model should be used to retrieve your users. Of course, it
| is often just the "User" model but you may use whatever you like.
|
*/

'model' => 'User',

/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/

'table' => 'users',

/*
|--------------------------------------------------------------------------
| Password Reminder Settings
|--------------------------------------------------------------------------
|
| Here you may set the settings for password reminders, including a view
| that should be used as your password reminder e-mail. You will also
| be able to set the name of the table that holds the reset tokens.
|
*/
'reminder' => array(
    'email' => 'emails.auth.reminder', 'table' => 'password_reminders',
),
 );
 ?>
4

8 に答える 8

15

データベースのパスワード フィールドに 64 文字分のスペースがあることを確認してください。varchar(64)

ハッシュには 64 文字が必要であり、ハッシュ化されたパスワードが挿入時に切り捨てられても、laravel からエラーが発生することはありません (したがって、パスワードを確実に検証することはできません)。

于 2013-12-13T14:52:36.850 に答える
10

@eric-evans は正しいです。laravel 4 で認証を使用するには、「ユーザー」モデルで \Illuminate\Auth\UserInterface インターフェイスを使用し、メソッドを実装する必要があります。

public function getAuthIdentifier() {
            return $this->getKey();
  }
public function getAuthPassword() {
            return $this->password;
        }
于 2013-07-28T04:18:10.597 に答える
2

私もこれで悩んでいました。私が気付いたのは、 User モデルに次のものがあったことです。

protected $softDelete = true;

データベースにはdeleted_at列がありましたが、タイムスタンプが0000-00-00 00:00:00にデフォルト設定されていました。これにより、レコードが見つからず、認証が失敗していました。

次のように、deleted_at 列が適切に作成されるように移行を修正する必要がありました。

public function up()
{
  Schema::create('users', function($t) {
    $t->increments('id');
    $t->string('first_name');
    $t->string('last_name');
    $t->string('username');
    $t->string('email');
    $t->string('password');
    $t->softDeletes();
    $t->timestamps();
  });
}

ソフト削除に関するドキュメントは次のとおりです: http://laravel.com/docs/eloquent#soft-deleting

于 2013-07-10T05:23:28.233 に答える
0

Auth クラスには、users テーブルの主キーとして id という列が必要です。

于 2013-08-27T20:38:38.823 に答える
0

パスワードがハッシュ化されているか確認してください。通常のテキストであってはなりません..

于 2015-09-18T20:57:06.580 に答える
0

User テーブルでは、パスワード フィールドが Hashed であることに注意してください。$credentials->password ハッシュされたパスワードを評価します

于 2014-06-21T12:54:30.840 に答える