Ada diskusi di Laravel Group tentang Sentinel yang memiliki fitur email aktivasi pada saat registrasi. Untuk membuat fitur tersebut, apakah bisa tanpa bantuan package dari pihak ketiga? Jawabannya tentu saja bisa.
Sebelum dimulai, saya asumsikan Laravel anda sudah terkonfigurasi dengan benar. Sehingga sudah bisa mengirimkan email dan save data ke database.
Migration
Hal pertama yang perlu anda lakukan adalah menambahkan dua field ke users table. Kira-kira begini migration-nya.
$table->string('activation_token')->nullable()->unique(); $table->datetime('activated_at')->nullable();
Setelah itu, jalankan perintah artisan berikut
php artisan make:mail UserActivation -m emails/activation
Perintah di atas akan men-generate dua file, yaitu app/Mail/UserActivation.php
dan resources/views/emails/activation.blade.php
Edit file app/Mail/UserActivation.php
Tambahkan public property $user
dan parameter $user
ke __construct
. Juga sedikit modifikasi pada method build
. Kira-kira menjadi seperti ini
public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->markdown('emails.verification', $this->user->toArray()); }
Berikutnya kita edit file resources/views/emails/activation.blade.php
@component('mail::message') # Activate your account Klik link berikut untuk mengaktifkan akun anda. @component('mail::button', ['url' => url('activation/' . $user->activation_token) ]) Aktifkan! @endcomponent Thanks, {{ config('app.name') }} @endcomponent
Route
Edit routes/web.php
, tambahkan route baru untuk handle activation token
Route::get('activation/{token}', function ($token) { $user = App\User::where('activation_token', $token)->first(); if ($user) { $user->activated_at = \Carbon\Carbon::now(); $user->save(); return 'Your account has been activated.'; } return 'Invalid activation token.'; });
Registrasi
Agar tutorialnya simple dan seragam, saya asumsikan anda menggunakan php artisan make:auth
untuk membuat registrasi.
Tambahkan method di bawah ini ke app/Http/Controllers/Auth/RegisterController.php
protected function registered(Request $request, $user) { \Mail::to($user)->send(new \App\Mail\UserActivation($user)); return 'Please check your mail box.'; }
Masih di file yang sama, pada method create, tambahkan activation_token
protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), // Tambahin ini nih... // Btw, jangan lupa nambahin 'activation_token' pada // property $fillable di file app/User.php 'activation_token' => str_random(64), ]); }
Selesai! Sekarang anda bisa coba lakukan registrasi. Lalu cek email, dan visit URL yang ada di email.
Kesimpulan
Membuat fitur mengirimkan email untuk aktivasi di Laravel sangat mudah. Sehingga penggunaan package tambahan tidak diperlukan.
Anda juga bisa mengubah fitur aktivasi lewat email menjadi aktivasi yang lain. Misalnya aktivasi menggunakan SMS dengan menggunakan fitur Notification di Laravel.
Contoh source code bisa dilihat di https://github.com/mul14/demo-account-activation-via-email-laravel54