Как хешировать пароль в валидаторе запросов?

Я хочу хешировать пароль и ввести его в валидатор запроса, чтобы иметь возможность сохранить регистрацию нового сотрудника. Можете ли вы помочь, как хэшировать пароль в валидаторе запросов?

Вот подробности моего проекта:

Модель:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;

class employes extends Model
{
    use HasFactory;

    protected $fillable = [
        'employee_name',
        'login',
        'password',
        'start_date',
        'post',
        'team_number',
        'isAdmin',
    ];

    public function orders()
    {
        return $this->hasMany(order::class,foreignKey:'employes_id',localKey:'id');
    }
 }

Запросить валидатор:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class AddEmployeeRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'employee_name' => ['required','string','min:4'],
            'login' => ['required','email','min:4'],
            'password' => ['required','string','min:4'],
            'start_date' => ['required','date'],
            'post' => ['required','string','min:2'],
            'team_number' => ['required','integer','max:4'],
            'isAdmin' => ['required','boolean'],
        ];
    }
 }

Контроллер:

<?php

namespace App\Http\Controllers;

use App\Http\Requests\AddEmployeeRequest;
use App\Models\employes;
use Illuminate\Http\Request;

class EmployeController extends Controller
{
    public function store(AddEmployeeRequest $request)
    {
       $request->validated();
       $employee = $request->validated();
       employes::create($employee);
       return to_route('admin.employes')->with('success', 'The employee is saved successfully');
    }
}

Форма просмотра:

@extends('layout')

@section('title','Add new Employee')

@section('content')
<div class = "container">
    <form action = "{{ route('admin.store_employee') }}" method = "post" class = "vstack gap-2">
        @csrf
        <div class = "row">
            @include('shared.input',['class'=>'col','type'=>'text','name'=>'employee_name'])
            @include('shared.input',['class'=>'col','type'=>'text','name'=>'login'])
            @include('shared.input',['class'=>'col','type'=>'password','name'=>'Password'])
            @include('shared.input',['class'=>'col','type'=>'date','name'=>'start_date'])
        </div>
        <div class = "row">
            @include('shared.input',['class'=>'col','type'=>'text','name'=>'post'])
            @include('shared.input',['class'=>'col','type'=>'integer','name'=>'team_number'])
        </div>

         <div class = "row">
            <label for = "isAdmin">User Status</label>

             <select value = "isAdmin"  class = "col form-control rounded-0" name = "isAdmin"       id = "isAdmin">
                <option selected value = "">Choose user type</option>

                <option value = "1">Administrator</option>
                <option  value = "0">User</option>
             </select>

             @error('isAdmin')
                <div class = "text-danger">
                   {{ $message }}
                </div>
             @enderror

          </div>
    
          <button class = "btn btn-primary">Add</button>
       </form>
   </div>

 @endsection

Можете ли вы правильно отформатировать код в своем сообщении, пожалуйста? Вам также не нужно выделять весь текст жирным шрифтом.

Martin Bean 29.08.2024 00:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам не нужно хешировать пароль, если вы просто добавите приведение hashed в столбец password, как это делает модель User по умолчанию:

https://github.com/laravel/laravel/blob/c12fd185e64b6fd652243e06f290f438164ddde5/app/Models/User.php#L44

Класс вашей модели также должен быть назван с использованием StudlyCase и единственного числа, поэтому должно быть Employee, а не «employes». Придерживайтесь соглашений об именах Laravel, и вам не придется писать так много кода.

Если вы имеете в виду хеширование пароля перед сохранением его в базе данных, вот модифицированная версия вашего кода:

use Illuminate\Support\Facades\Hash;

public function store(AddEmployeeRequest $request)
{
    $request->validated();
    $employee = $request->validated();

    // Hash the password using the Hash facade
    if (isset($employee['password'])) {
        $employee['password'] = Hash::make($employee['password']);
    }

    employes::create($employee);
    return to_route('admin.employes')->with('success', 'The employee is 
  saved 
  successfully');
}

Другие вопросы по теме