Laravel 5.8 - учетные данные не соответствуют нашим записям / функция попытки входа в систему всегда возвращает false

Я пытаюсь реализовать систему аутентификации с версией 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 ... Не понимаю, как я могу это исправить ...


person skywalskurt    schedule 26.08.2020    source источник
comment
Можете ли вы обновить здесь код LoginController, он выглядит как вставка из конфигурации auth. Также можно ли создать таблицу пользователей с заполненными пользователями и паролями?   -  person Cameron    schedule 26.08.2020
comment
@Cameron Ага, извини, это отредактировано. Да, у меня есть таблица пользователей для вызова пользователей с хешированными паролями   -  person skywalskurt    schedule 26.08.2020
comment
Я думаю, что возврат ACTIVE_DIRECTORY_USER может быть проблемой. позвольте мне проверить некоторые из моих сайтов   -  person Cameron    schedule 26.08.2020
comment
ACTIVE_DIRECTORY_USER - это поле, которое я хочу использовать в качестве имени пользователя.   -  person skywalskurt    schedule 26.08.2020
comment
вопрос, вы передаете ACTIVE_DIRECTORY_USER в качестве ввода формы в пользу имени пользователя на странице входа?   -  person Cameron    schedule 26.08.2020
comment
Я не понимаю, почему это может быть так, я следовал документации, чтобы настроить имя пользователя: laravel.com /docs/5.8/authentication   -  person skywalskurt    schedule 26.08.2020
comment
проверить ресурсы / просмотры / auth / login.blade.php | ‹Input id = email type = email class = form-control @error ('email') is-invalid @enderror name = ACTIVE_DIRECTORY_USER value = {{old ('ACTIVE_DIRECTORY_USER')}} требуется autocomplete = ACTIVE_DIRECTORY_USER автофокус› или если вы используя vue / response и т. д., просто проверьте имя поля электронной почты в форме. Это должно соответствовать вашему новому заголовку поля   -  person Cameron    schedule 26.08.2020


Ответы (1)


// это свойство AuthenticatedUsers

    /**
     * Get the needed authorization credentials from the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'password');
    }

Вы должны убедиться, что форма публикации на странице входа передает пароль и ACTIVE_DIRECTORY_USER. Запрос захватывает имя пользователя $ this- ›, которое является ACTIVE_DIRECTORY_USER, и поле пароля, опубликованное из формы входа / файла лезвия.

Поток: отображается форма. Форма имеет поля электронной почты и пароль в качестве входных данных. Они отправляются контроллеру входа в $ request- ›email и $ request-› password. Laravel по умолчанию захватывает только эти два поля в методе учетных данных в трейте AuthenticadedUsers, используя $ this- ›username. Однако вы меняете имя пользователя $ this- ›, но не меняете сообщение в форме. Итак, он ищет $ this- ›ACTIVE_DIRECTORY_USER в запросе post $, но по-прежнему имеет только $ this-› email и $ this- ›пароль. Обновите файл login.blade.php, чтобы изменить поле электронной почты на ACTIVE_DIRECTORY_USER, чтобы оно существовало в запросе.

person Cameron    schedule 26.08.2020
comment
вывод, когда я сбрасываю функцию учетных данных с запросом: array['ACTIVE_DIRECTORY_USER => 'test', 'password' => 'test]' - person skywalskurt; 26.08.2020
comment
да, обновите форму входа. его адрес электронной почты и пароль в виде полей формы. вам нужно изменить его с электронной почты на ACTIVE_DIRECTORY_USER в форме, прежде чем он отправит сообщение контроллеру входа. Прямо сейчас $ request- ›ACTIVE_DIRECTORY_USER не существует, но $ request-› email существует. - person Cameron; 26.08.2020
comment
в качестве альтернативы добавьте этот метод к учетным данным защищенной функции контроллера входа (Request $ request) {return $ request- ›only ('email', 'password'); } - person Cameron; 26.08.2020
comment
я уже сделал это :( посмотрите мой пост, я отредактировал его с помощью формы входа - person skywalskurt; 26.08.2020
comment
учетные данные защищенной функции (Request $ request) {dd ($ request- ›all ()); // возвращаем $ request- ›only ($ this-› username (), 'password'); } - person Cameron; 26.08.2020
comment
как я сказал выше, array['ACTIVE_DIRECTORY_USER => 'test', 'password' => 'test]' с токеном csrf - person skywalskurt; 27.08.2020
comment
Я видел, как вы напечатали это дважды: я просто хочу убедиться, что это не опечатка: array ['ACTIVE_DIRECTORY_USER = ›] должно быть array [' ACTIVE_DIRECTORY_USER '=› с одинарными кавычками вокруг' ACTIVE_DIRECTORY_USER ' - person Cameron; 28.08.2020
comment
да, извини, я допустил опечатку, у меня _1 _... К сожалению, это не опечатка ... :( - person skywalskurt; 30.08.2020
comment
Попробуйте забыть мой пароль по электронной почте - person Cameron; 31.08.2020