Tutorial Sebelumnya:
Tutorial Laravel #10: Membuat Login pada Laravel
Tutorial ini adalah lanjutan dari tutorial sebelumnya Membuat Login pada Laravel. Pada tutorial kali ini kita akan Membuat Register User pada Laravel. Disini kita akan menambahkan fitur validasi melalui link yang dikirim ke email pada saat Register user di Laravel.
Pada kasus ini kita menggunakan email google (Gmail) sebagai mail servernya, dengan begitu artinya gmail kita yang bertugas untuk mengirimkan URL validasi ke email user yang melakukan registrasi.
Di bawah ini ada dua metode register yang akan kita pelajari. Pertama Register User Laravel tanpa verifikasi email, dan kedua Register User Laravel dengan Verifikasi Melalui Email.
Membuat Register User Laravel tanpa Kirim Email
1. Membuat Tabel
Pada kasus ini kita menggunakan tabel users.
Field apa saja dan tipe data nya lihat pada gambar di bawah ini:
2. Membuat Model
Jangan lupa susuaikan lagi isi dari user model Anda.
Model User berada pada direktori app/Models/User.php
Isi dari Model User.php sebagai berikut:
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $table = 'users';
protected $primaryKey = 'id_user';
protected $fillable = ['username','password','role','email','verify_key','active'];
}
3. Membuat Route
Selanjutnya adalah membuat route.
Buka file web.php yang berada pada direktori routes/web.php
Tambahkan route seperti di bawah ini:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;
//REGISTER
Route::get('register', [RegisterController::class, 'register'])->name('register');
Route::post('register/action', [RegisterController::class, 'actionregister'])->name('actionregister');
4. Membuat Controller
Membuat controller baru dengan nama RegisterController.
Isi dari file RegisterController.php adalah sebagai berikut:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Session;
class RegisterController extends Controller
{
public function register()
{
return view('register');
}
public function actionregister(Request $request)
{
$user = User::create([
'email' => $request->email,
'username' => $request->username,
'password' => Hash::make($request->password),
'role' => $request->role,
'active' => 1
]);
Session::flash('message', 'Register Berhasil. Akun Anda sudah Aktif silahkan Login menggunakan username dan password.');
return redirect('register');
}
}
5. Membuat View
Selanjutnya kita akan membuat tampilan form register.
Silahkan buat file view baru dengan nama register.blade.php pada direktori resources/views/register.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Register User</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css">
</head>
<body>
<div class="container"><br>
<div class="col-md-6 col-md-offset-3">
<h2 class="text-center">FORM REGISTER USER</h3>
<hr>
@if(session('message'))
<div class="alert alert-success">
{{session('message')}}
</div>
@endif
<form action="{{route('actionregister')}}" method="post">
@csrf
<div class="form-group">
<label><i class="fa fa-envelope"></i> Email</label>
<input type="email" name="email" class="form-control" placeholder="Email" required="">
</div>
<div class="form-group">
<label><i class="fa fa-user"></i> Username</label>
<input type="text" name="username" class="form-control" placeholder="Username" required="">
</div>
<div class="form-group">
<label><i class="fa fa-key"></i> Password</label>
<input type="password" name="password" class="form-control" placeholder="Password" required="">
</div>
<div class="form-group">
<label><i class="fa fa-address-book"></i> Role</label>
<input type="text" name="role" class="form-control" value="Guest" readonly>
</div>
<button type="submit" class="btn btn-primary btn-block"><i class="fa fa-user"></i> Register</button>
<hr>
<p class="text-center">Sudah punya akun silahkan <a href="#">Login Disini!</a></p>
</form>
</div>
</div>
</body>
</html>
Berikut tampilan form register user yang kita buat dari code di atas:
6. Selesai
Anda telah berhasil membuat register user dengan status user 1 (Aktif). Artinya User dapat langsung login tanpa terlebih dahulu melakukan verifikasi akun melalui email.
Register User dengan Verifikasi Email
Cara Membuat Register User pada Laravel dengan Verifikasi melalui Email, sebagai berikut:
1. Mengaktifkan Google Security App password
Pastikan untuk mengaktifkan pengaturan Google Security pada akun Gmail Anda. Caranya, login terlebih dahulu ke akun google lalu masuk ke halaman Google Account, lalu klik Security.
Scroll ke bawah sampai Anda menemukan bagian App password seperti gambar di bawah ini:
Silahkan Anda klik App password. Selanjutnya di bagian Select app pilih Other (Custom name).
Selanjutnya akan muncul isian nama aplikasi, isi dengan nama Laravel. Lalu klik Generate.
Anda akan mendapatkan 16 karakter password.
Password tersebut yang akan kita gunakan untuk configurasi MAIL_PASSWORD
pada file .env
project laravel Anda.
2. Configurasi file .env
pada project laravel Anda
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=ari210393@gmail.com # diisi dengan email google anda yg akan dijadikan mail server
MAIL_PASSWORD='mkapiuqignjzcyoz' # diisi dengan App Password yang sudah di generate
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=ari210393@gmail.com # diisi dengan email google anda yg akan dijadikan mail server
MAIL_FROM_NAME="${APP_NAME}"
2. Tabel dan Model
Untuk tabel dan model kita masih menggunakan Tabel Users dan Model User di atas.
3. Membuat Mail Class Laravel
Untuk membuat Mail Class jalankan perintah berikut:
php artisan make:mail MailSend
Maka file dengan nama MailSend.php akan dibuat pada direktori app/mail/MailSend.php
Isi dari MailSend.php seperti di bawah ini:
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class MailSend extends Mailable { use Queueable, SerializesModels; public $details; /** * Create a new message instance. * * @return void */ public function __construct($details) { $this->details = $details; } /** * Build the message. * * @return $this */ public function build() { return $this->subject('Verifikasi Akun') ->view('mailTemplate'); } }
Perhatikan code di atas, pada bagian ->view('mailTemplate');
adalah sebuah view yang akan menjadi tampilan email kita nanti saat dibuka oleh pengguna yang melakukan registrasi. Artinya pada view ini akan kita buat tombol verikasi yang akan di klik oleh pengguna untuk melakukan aktivasi akun.
Sekarang buat file view baru dengan nama mailTemplate.blade.php pada direktori resources/views/mailTemplate.blade.php
Isi dari mailTemplate.blade.php seperti di bawah ini:
<!DOCTYPE html>
<html>
<head>
<title>Verifikasi Akun</title>
</head>
<body>
<p>Halo <b>{{$details['username']}}</b>!</p>
<p>Berikut ini adalah Data Anda:</p>
<table>
<tr>
<td>Username</td>
<td>:</td>
<td>{{$details['username']}}</td>
</tr>
<tr>
<td>Role</td>
<td>:</td>
<td>{{$details['role']}}</td>
</tr>
<tr>
<td>Website</td>
<td>:</td>
<td>{{$details['website']}}</td>
</tr>
<tr>
<td>Tanggal Register</td>
<td>:</td>
<td>{{$details['datetime']}}</td>
</tr>
</table>
<center>
<h3>Copy link di bawah ini ke browser Anda untuk Verifikasi Akun:</h3>
<b style="color:blue">{{$details['url']}}</b>
</center>
<p>Terima kasih telah melakukan registrasi.</p>
</body>
</html>
4. Membuat Route
Tambahkan route berikut:
Route::get('register/verify/{verify_key}', [RegisterController::class, 'verify'])->name('verify');
Sehingga Full code dari route menjadi:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;
//REGISTER
Route::get('register', [RegisterController::class, 'register'])->name('register');
Route::post('register/action', [RegisterController::class, 'actionregister'])->name('actionregister');
Route::get('register/verify/{verify_key}', [RegisterController::class, 'verify'])->name('verify');
5. Membuat Controller
Kita masih menggunakan RegisterController.php yang sudah dibuat di atas.
Ada beberapa tambahkan code pada RegisterController.php antara lain:
Penambahan di bagian use
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use App\Mail\MailSend;
Penambahan pada function actionregister()
$details = [
'username' => $request->username,
'role' => $request->role,
'website' => 'www.ayongoding.com',
'datetime' => date('Y-m-d H:i:s'),
'url' => request()->getHttpHost().'/register/verify/'.$str
];
Mail::to($request->email)->send(new MailSend($details));
Session::flash('message', 'Link verifikasi telah dikrim ke Email Anda. Silahkan Cek Email Anda untuk Mengaktifkan Akun');
Penambahan function baru dengan nama function verify
public function verify($verify_key)
{
$keyCheck = User::select('verify_key')
->where('verify_key', $verify_key)
->exists();
if ($keyCheck) {
$user = User::where('verify_key', $verify_key)
->update([
'active' => 1
]);
return "Verifikasi Berhasil. Akun Anda sudah aktif.";
}else{
return "Key tidak valid!";
}
}
Sehingga full code dari RegisterController.php menjadi seperti di bawah ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Session;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use App\Mail\MailSend;
class RegisterController extends Controller
{
public function register()
{
return view('register');
}
public function actionregister(Request $request)
{
$str = Str::random(100);
$user = User::create([
'email' => $request->email,
'username' => $request->username,
'password' => Hash::make($request->password),
'role' => $request->role,
'verify_key' => $str
]);
$details = [
'username' => $request->username,
'role' => $request->role,
'website' => 'www.ayongoding.com',
'datetime' => date('Y-m-d H:i:s'),
'url' => request()->getHttpHost().'/register/verify/'.$str
];
Mail::to($request->email)->send(new MailSend($details));
Session::flash('message', 'Link verifikasi telah dikrim ke Email Anda. Silahkan Cek Email Anda untuk Mengaktifkan Akun');
return redirect('register');
}
public function verify($verify_key)
{
$keyCheck = User::select('verify_key')
->where('verify_key', $verify_key)
->exists();
if ($keyCheck) {
$user = User::where('verify_key', $verify_key)
->update([
'active' => 1
]);
return "Verifikasi Berhasil. Akun Anda sudah aktif.";
}else{
return "Key tidak valid!";
}
}
}
6. Membuat view
Ini adalah view untuk menampilkan form registrasi user. Kita masih menggunakan view register.blade.php di atas.
7. Testing
Jalankan laravel Anda. Isi data dan email yang benar. Klik Register.
Muncul pesan Link verifikasi telah dikirim ke email Anda.
Buka email Anda lalu cek email verifikasi dari laravel. Seperti di bawah ini:
Silahkan copy Link. Jalankan link tersebut pada browser.
Berhasil. Akun Anda sudah diaktifkan melalui link verifikasi.
Kita telah berhasil Membuat Register User di Laravel. Sekian dulu tutorial cara membuat register user pada Laravel dengan mengirim link validasi melalui email. Semoga bermanfaat untuk Anda.
Pada tutorial selanjutnya kita akan membuat Insert Data ke Database di Laravel menggunakan dua cara. Pertama dengan cara insert data dari form seperti biasa, kedua dengan cara insert data menggunakan ajax.
Tutorial Selanjutnya:
Tutorial Laravel #12: Insert atau Add Data pada Laravel
Tutorial Laravel #13: Insert atau Add Data pada Laravel (Menggunakan Ajax)
trimakasih tutor create register nya
mantap mas ini artikel Registernya
ini tutorialnya lanjutan yg login ya?
iya kak
terimaksih kak, artikel registernya sangat membantu
siang gan, untuk penjelasan pada artikel ini sangat jelas
Bagus dan berguna
isi artikelnya gampang dipahami
lancar..tutorial berguna
berhasil kak, sangat membantu 🙏
sukses.. Bang terimaksih artikel nya
okee kakak
nice.
btw artikel untuk buat register user mantab bang
nice bang,btw artike untuk membuat login user mana bang?
terimkasih bang..
untuk artikel membuat login laravel silahkan kunjungi link berukut bang: Membuat Login pada Laravel
mantap.. codenya simpeell
selamat malam.. ini di saya masih error Target class [RegisterController] does not exist
kenapa ya?
itu karna cache laravel nya kak..
coba jalankan perintah ini:
php artisan optimize
Mohon maaf untuk bagian ini sepertinya ada penjelasan yg hilang
terimakasih masukkannya bang..
artikelnya sudah saya perbarui
mantap.. scriptnya ringkas
terimakasih yaa
di bagian syntax
use Session
ada kurang titik koma nya kakwah mantap kak.
terimaksih koreksi nya kak.
Kak bagusnya di bagian setting google account sertakan sama gambarnya?
termakasih masukannya kak.
baik kak.. gambar nya sudah di update
Maaf bang, itu gambar sama source kodenya ga muncul. saya kagi belajar nanggung banget. mohon di perbaiki karena postingan ini sangat membatu saya untuk belajar.
Terimakasih masukkannya kak.
artikelnya sudah saya update kak.
semoga membantu yaa..
gambar sama kodenya semua jelas
kode nya tidak muncul kang
tidak muncul di bagian mana kang?
terimakasih sudah ngasih tutor yg jls
sukses
permisi kang, masih muncul pesan error
Target class [RegisterController] does not exist.
pdhal udan mengikuti saran di komentar sebelumnya, tapi masih error juga
Terima kasih, sudah membantu kak hehe
untuk db tabel user itu diubah apa di tambahkan?, soalnya ada eror
Mau tanya mas, saya sudah daftar user di register tapi sewaktu login kok halaman login nge blink aja ya gak masuk ke halaman home. itu kenapa ya. padahal gak ada pesan error
kenapa saat saya klik tombol register tidak ada yang terjadi?
error di bagian verify key nya
saya sebelum dapet error sy sudah mengira kalo value untuk verify key nya tidak ada.
tolong bang utk diperbarui.
mantap..