Register Dengan Mengirim Email Verifikasi Menggunakan Laravel 5.x— Part 1

Chengcheng
4 min readDec 10, 2017

--

Kali ini dapat kerjaan yang mengharuskan verifikasi user baru melalui email, tetapi semua itu lumayan mudah di lakukan dengan laravel, dengan menggunakan melakukan override method dari RegisterController (auth template laravel).

  • Config email pada file .env
  • Install auth scaffolding laravel
  • Override method register() pada RegisterController
  • Buat listener event untuk mengirim email registrasi
  • Membuat email template sederhana
  • login logic dengan menggunakan custom validator

Di atas adalah langkah-langkah secara umum yang saya lakukan untuk fitur yang akan kita buat. Dan kita mulai pada file .env

1. Config file .env untuk mengirim email

contoh pengaturan email pada file .env laravel

Gambar di atas merupakan konfigurasi dari file .env untuk smtp gmail yang akan di gunakan sebagai pengirim ke masing-masing user yang registrasi. Pembahasan untuk file .env tidak terlalu panjang lebar karna kita cuma mengisi key config tersebut sesuai dengan apa yang kita gunakan.

2. Install auth scaffolding laravel

Langkah selanjutnya kita install auth scaffolding laravel dengan mengetikkan perintah pada terminal atau command prompt

php artisan make:auth

Berikut contoh dan hasilnya.

Install auth template laravel

Pada file web.php dalam direktori routes akan terdapat route baru yaitu

Auth::routes();

Dan pada direktori resources/views terdapat direktori yang di buat oleh auth laravel sendiri dengan nama direktori auth. Untuk instalasi auth scaffolding laravel disini telah selesai, tugas kita selanjutnya membuat logic-nya atau override method register() pada RegisterController.

3. Override method register() pada RegisterController

Ok di tahap ini kita melakukan override method register() pada RegisterController, mungkin akan timbul pertanyaan

Kenapa RegisterController? Kenapa method register()?

Untuk meyakinkan anda, silahkan jalankan perintah

php artisan route:list

maka akan tampil daftar seluruh route dari apa yang kita buat. Berikut contoh hasilnya

Daftar seluruh route pada aplikasi laravel

Dari gambar di atas kita bisa melihat route register dengan method GET di handle oleh RegisterController dengan method register() yang dimana RegisterController tersebut terdapat pada app/Http/Controllers/Auth.

Tetapi ketika membuka file RegisterController kita sama sekali tidak mendapati method register(), tentu kita tidak mendapati method tersebut, method tersebut terdapat pada file vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php karena RegistersUsers adalah trait kita akan melihat pada RegisterController seperti ini

RegisterUsers Trait pada RegisterController

Gambar di atas terlihat jelas dari penggunaan trait RegistersUsers, untuk lebih jelasnya tentang trait anda bisa mencarinya sendiri, langkah selanjut nya kita akan melihat apa yang di lakukan method register()

public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all()))); $this->guard()->login($user); return $this->registered($request, $user)
?: redirect($this->redirectPath());
}

Dari method register() tersebut melakukan validasi inputan dari form, kemudian membuat user baru dengan method create()

protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}

Method create() akan menghasilkan sebuah object dan object tersebut akan di parsing ke event Registered, kemudian melakukan login dari object yang di hasilkan dari method create(), karena method registered() tidak mengembalikan nilai apapun jadi method registered() ini akan mengalihkan halaman ke URL yang telah di tentukan dari variable $redirectTo, yang terdapat pada RegisterController. Penjelasan tentang method register() dari trait RegistersUsersselesai, kali ini kita akan mengubah sedikit dari method create() dan melakukan override pada method register(), tapi sebelumnya kita perlu menambah kolom pada table users dengan is_active dan token_register yang dimana kolom is_active untuk menentukan user sudah terverifikasi atau belum ketika user login, dan untuk token_register kita menggunakannya sebagai acuan saat verifikasi berlangsung.
Untuk file migration users yang terdapat pada database/migrations/xxx_xx_xx_xxxxxx_create_users_table.php tambah kan schema column dengan pada method up()

$table->boolean('active')->default(false);
$table->longText('token_register');

Sehingga hasil nya seperti ini

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->boolean('active')->default(false);
$table->longText('token_register');
$table->rememberToken();
$table->timestamps();
});
}

Dan ubah AppServiceProvider.php dengan menambahkan code berikut ke dalam method boot()

\Illuminate\Support\Facades\Schema::defaultStringLength(191);

Kemudian migrate table users dengan command / perintah

php artisan migrate

Jangan lupa untuk update model Users dengan menambahkan item nama kolom ke dalam array $fillable, seperti ini

protected $fillable = [
'name',
'email',
'password',
'token_register',
'active'
];

Kita kembali ke RegisterController ubah method create sehingga menjadi seperti ini

protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'token_register'=>str_random(190)
]);
}

Ketika user melakukan registrasi, random string di berikan kepada user yang akan menjadi penentu dari masing-masing user. Setelah method create(), kita beralih ke method register() dari trait yang kita bahas sebelumnya. Tulis ulang method register() ke dalam class RegisterController dan hilangkan atau comment code pada $this->guard()->login($user); dan return $this->registered($request, $user) ? : redirect($this->redirectPath()); dan berikan return berupa view() atau pun text. Berikut contohnya.

public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));// $this->guard()->login($user);// return $this->registered($request, $user)
// ? : redirect($this->redirectPath());
return view('auth.register-success');
}

Dan isi dari view register-success.blade.php

@extends('layouts.app')@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Register</div>
<div class="panel-body">
Register berhasil silahkan cek email anda.
</div>
</div>
</div>
</div>
</div>
@endsection

Karna default dari auth scaffolding sudah membuat event yaitu Registered jadi kita melangkah ke MEMBUAT LISTENER UNTUK EVENT REGISTERED

Lanjut ke part 2.

--

--