Laravel 5.5, как изменить процесс входа в систему, чтобы использовать существующую таблицу пользователей БД (SQL Server)

Я новичок в Laravel. Извините за любой глупый вопрос. Мой сценарий следующий: на сервере Sql есть предыдущая база данных с пользовательской таблицей. Эта таблица называется USUARIO_EMITENTE. В этой таблице есть ключевое поле под названием «пользователь» и поле «пароль», в котором используется md5 (это не моя вина, он уже был там). Итак, я изменил модель пользователя, чтобы использовать эту таблицу следующим образом:

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $table = 'Usuario_Emitente';
}

мой loginController используется по умолчанию (с использованием laravel 5.5):

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

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');
    }
}

Теперь мне нужно изменить LoginController на: 1) Получить поле «пользователь» вместо электронной почты по умолчанию для laravel Auth; 2) использовать md5 вместо bcrypt; 3) После входа перенаправление в /menu

Должен ли я изменить любой другой класс, чтобы сделать это?

Кто-нибудь может мне помочь?


person Heber Paes Fomin    schedule 19.06.2018    source источник


Ответы (1)


Этот процесс входа в систему требует нескольких вещей — установки имен данных формы, настройки маршрута для формы входа и сопоставления маршрута с логикой, которая выполняет проверки хеширования и перенаправления/валидации. (Вы также можете добавить проверку сервера и сообщение об ошибке).

(1) когда вы отправляете форму для аутентификации, вы должны использовать имя пользователя и сказать «пройти»,

(2) в route.php вы направляете URL-адрес авторизации POST в LoginController (новый метод) loginUser:

Route::post('/login', 'LoginController@loginUser');

(3) Добавьте логику в функцию loginUser(), обрабатывающую шифрование, данные полей и перенаправление (теоретически вы также захотите запустить здесь проверку и проверку входных данных). ПРИМЕЧАНИЕ. Согласно сообществу, md5 поверх bcrypt НЕ рекомендуется, но это можно сделать вручную (Как мне использовать md5 вместо bcrypt?)!

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

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');
    }

    public function loginUser()
    {
        // $data = \Request::all();
        $user = \Request::input(‘user’);
        $pass = \Request::input(‘pass’);

        if ( !isset($user) || !isset($pass) ) {
            // Bad Creds. No access!
            return redirect('/loginPage');
        } else {

            $user = User::where('user', $user)->where('password', md5($pass))->first();

            if ($user) {
            Auth::login($user);
            return redirect()->intended('/');
            } else {/* No User Found? */}

        }
    }

}

(4) Согласно тому же сообщению выше, вам также необходимо создать нового поставщика услуг для MD5 для использования в вашем классе LoginController. Это позволяет вам использовать «md5(…)», как указано выше. Однако, поскольку на этот вопрос ответил другой пользователь, я оставлю ссылку, чтобы вы могли перейти и посмотреть, что он сделал.

Надеюсь это поможет.

Справочник

md5 поверх bcrypt в Laravel5.5

person RoboBear    schedule 19.06.2018
comment
Большое спасибо. Скажите мне что-нибудь, что вы думаете о том, чтобы переопределить метод login() в LoginController, чтобы сделать почти то же самое? это хорошо? - person Heber Paes Fomin; 20.06.2018
comment
Пока вы также обновляете свой маршрут, чтобы сопоставить этот метод входа в систему, определенно - тогда код будет функционально эквивалентен. - person RoboBear; 20.06.2018