1. Laravel
  2. PHP

Menambahkan halaman update Password Laravel

This entry is part 6 of 6 in the series Laravel Authentication

Melanjutkan artikel sebelumnya menambahkan halaman update profile pada Laravel, pada artikel ini kita akan membahas bagaimana menambahkan fitur update password pada Laravel.

Edit Password

Untuk mengizinkan pengguna mengupdate password mereka, kita harus menyediakan halaman untuk update password.

Password Controller

Pertama kita buat controller baru dengan nama class misalnya PasswordController. Gunakan perintah artisan untuk membuat controller baru.

php artisan make:controller PasswordController

Kemudian tambahkan method dengan nama edit untuk menampilkan halaman update password.

<?php

namespace App\Http\Controllers;

class PasswordController extends Controller
{
    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function edit()
    {
        return view('password.edit');
    }
}

Route

Tambahkan route untuk menampilkan halaman edit password dan jangan lupa menambahkan auth middleware pada route ini untuk memastikan hanya user yang login yang bisa mengakses halaman ini.

Route::group(['middleware' => 'auth'], function () {

    Route::get('password', 'PasswordController@edit')
        ->name('user.password.edit');
});

View Edit Password

Kemudian buat view baru (resources/views/password/edit.blade.php) untuk menampilkan halaman edit profile.

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">
                        Update Password
                    </div>

                    <div class="card-body">
                        <form method="POST" action="{{ route('user.password.update') }}">
                            @method('patch')
                            @csrf

                            <div class="form-group row">
                                <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                                <div class="col-md-6">
                                    <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                    @error('password')
                                        <span class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                    @enderror
                                </div>
                            </div>

                            <div class="form-group row">
                                <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                                <div class="col-md-6">
                                    <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                                </div>
                            </div>

                            <div class="form-group row mb-0">
                                <div class="col-md-6 offset-md-4">
                                    <button type="submit" class="btn btn-primary">
                                        Update Password
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

Untuk mengakses halaman update profile, buka browser anda dan masukan alamat https://localhost:8000/password. maka anda akan melihat halaman seperti dibawah ini.

Laravel Update password

Update Password

Setelah kita bisa menampilkan halaman edit password, selanjutnya kita akan membuat proses untuk mengupdate password user di database.

Validasi Password

Untuk memvalidasi input pengguna pada saat update profile, tambahkan FormRequest untuk menangani proses validasi ini dengan menjalankan perintah dibawah ini.

php artisan make:request UpdatePasswordRequest

Perintah diatas akan membuat sebuah file baru (app\Http\Requests\UpdatePasswordRequest.php), kemudian ubah class UpdatePasswordRequest seperti dibawah ini:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;

class UpdatePasswordRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ];
    }
}

Password Controller

Untuk menambahkan proses update password, tambahkan sebuah method pada controller Password untuk menangani proses update pada database.

/**
 * @param UpdatePasswordRequest $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function update(UpdatePasswordRequest $request)
{
    $request->user()->update([
        'password' => Hash::make($request->get('password'))
    ]);

    return redirect()->route('user.password.edit');
}

Route

Tambahkan route untuk menangani method update pada controller Password kemudian beri nama route dengan nama user.password.update karena kita menggunakan nama route ini pada halaman edit password.

Route::group(['middleware' => 'auth'], function () {

    Route::get('password', 'PasswordController@edit')
        ->name('user.password.edit');

    Route::patch('password', 'PasswordController@update')
        ->name('user.password.update');
});

Validasi Current Password

Selain menambahkan fitur update password laravel, kita juga akan belajar bagaimana menambahkan validasi old password, yang mana pengguna harus memasukan password lama untuk mengupdate password. Berikut langkah-langkah untuk menambahkan validasi old password / current password pada saat proses update password.

View edit password

Tambahkan field current_password pada view edit password.

<div class="form-group row">
    <label for="current_password" class="col-md-4 col-form-label text-md-right">{{ __('Current Password') }}</label>

    <div class="col-md-6">
        <input id="current_password" type="password" class="form-control @error('current_password') is-invalid @enderror" name="current_password" required autocomplete="current_password">

        @error('current_password')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>

Berikut tampilan halaman edit password setelah menambahkan kode diatas.

Laravel Update Password

Current Password Rule

Biasanya pada halaman update password pengguna juga akan diminta untuk mengisikan password saat ini. Karena itu kita akan membuat custom rule untuk validasi current password pada halaman update password Laravel.

Jalankan perintah berikut pada command line.

php artisan make:rule CurrentPassword

Kode diatas akan membuat file baru (app/Rules/CurrentPassword) untuk menangani custom validation rule. Kemudian ubah class CurrentPassword seperti dibawah ini.

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class CurrentPassword implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return Hash::check($value, Auth::user()->password);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Current password doesn\'t match';
    }
}

Update Password Request

Terakhir tambahkan custom rule yang telah kita buat pada proses diatas pada method rules.

<?php

namespace App\Http\Requests;

use App\Rules\CurrentPassword;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;

class UpdatePasswordRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'current_password' => ['required', 'string', new CurrentPassword()],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ];
    }
}

Kemudian silahkan coba untuk mengupdate password dengan data yang salah pada field current password. Jika custom validation rule diatas sesuai, maka akan muncul error message seperti ini.

Laravel Current Password Validation
Series Navigation<< Menambahkan halaman update profile Laravel
Comments to: Menambahkan halaman update Password Laravel

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.