Я пытаюсь реализовать систему аутентификации с версией Laravel 5.8. Я запустил php artisan make:auth
и немного изменил код, чтобы приспособиться к тому, что мне нужно.
Я создал пользователей с моей моделью Eloquent с хешированным паролем, созданным с помощью класса Illuminate\Support\Facades\Hash
.
Но прямо сейчас я не могу пройти аутентификацию в собственном приложении, и я не понимаю, почему у меня каждый раз появляется ошибка These credentials do not match our records
.
Итак, вот моя модель App\User
:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use LdapRecord\Laravel\Auth\HasLdapUser;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use LdapRecord\Laravel\Auth\AuthenticatesWithLdap;
use LdapRecord\Laravel\Auth\LdapAuthenticatable;
/**
* Class User
*
* @property int $ID_USER
* @property string $LASTNAME
* @property string $FIRSTNAME
* @property string $ACTIVE_DIRECTORY_USER
* @property int $ID_ROLE
* @property string $password
* @property Role $role
*
* @package App\Models
*/
class User extends Authenticatable
{
use Notifiable;
/**
* The object classes of the LDAP model.
*
* @var array
*/
public static $objectClasses = [];
protected $table = 'users';
protected $primaryKey = 'ID_USER';
public $incrementing = false;
public $timestamps = false;
protected $casts = [
'ID_USER' => 'int',
'ID_ROLE' => 'int'
];
protected $fillable = [
'ID_USER',
'LASTNAME',
'FIRSTNAME',
'ACTIVE_DIRECTORY_USER',
'ID_ROLE',
'password'
];
public function role()
{
return $this->belongsTo(Role::class, 'ID_ROLE');
}
}
Конфигурация аутентификации:
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session", "token"
|
*/
'guards' => [
// 'web' => [
// 'driver' => 'session',
// 'provider' => 'ldap',
// ],
'web' => [
'driver' => 'session',
'provider' => 'users'
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];
LoginController:
<?php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use LdapRecord\Container;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\User;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Get the login username to be used by the controller.
*/
public function username() {
return 'ACTIVE_DIRECTORY_USER';
}
}
Форма с точки зрения:
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
<label for="ACTIVE_DIRECTORY_USER" class="col-md-4 col-form-label text-md-right">{{ __("Nom d'utilisateur") }}</label>
<div class="col-md-6">
<input id="ACTIVE_DIRECTORY_USER" type="text" class="form-control @error('ACTIVE_DIRECTORY_USER') is-invalid @enderror" name="ACTIVE_DIRECTORY_USER" value="{{ old('ACTIVE_DIRECTORY_USER') }}" required autocomplete="ACTIVE_DIRECTORY_USER" autofocus>
@error('ACTIVE_DIRECTORY_USER')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Mot de passe') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Se souvenir de moi') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Connexion') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Mot de passe oublié ?') }}
</a>
@endif
</div>
</div>
</form>
Я немного подглядывал за чертой AuthenticatesUsers
, и кажется, что проблема исходит от функции attemptLogin
, потому что она каждый раз возвращает false ... Не понимаю, как я могу это исправить ...