Cara Mudah Membuat Verifikasi Email Register Pada Laravel
Disini kita akan membuat verifikasi email setelah melakukan registrasi. Status pada user kita akan kategorikan menjadi 3 : Active, InActive, NotVerified.
1. Override pada Auth Controller
Pada saat register, kita akan mengirimkan token untuk verifikasi.
app/Http/Controllers/Auth/RegisterController.php
.
use Ramsey\Uuid\Uuid;
use App\Models\Verification;
use App\Mail\AccountVerification;
use Illuminate\Auth\Events\Registered;
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$verification = Verification::create([ 'user_id' => $user->id, 'token' => Uuid::uuid4()->toString() ]);
\Mail::to($user->email)->send(new AccountVerification($user, $verification->token));
return redirect()->back()->withSuccess('Akun berhasil dibuat, Mohon periksa email Anda <b>' . $request->email . '</b> untuk melakukan aktivasi.');
}
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'status' => Status::NotVerified,
]);
}
public function verification(Request $request)
{
$verification = Verification::where('token', $request->token)->first();
if ($verification) {
$user = Applicant::find($verification->user_id);
$user->status = Status::Active;
$user->save();
$verification->delete();
return redirect()->route('login');
}
return redirect('/');
}
note : pada AccountVerification
merupakan email yang akan kita kirimkan dengan template yang sudah disiapkan.
Pada login kita tambahkan untuk pengecekan hanya bisa login dengan status aktif saja.
app/Http/Controllers/Auth/LoginController.php
.
protected function credentials(Request $request)
{
return array_merge($request->only($this->username(), 'password'), ['status' => Status:Active]);
}
2. Membuat Tabel Verifikasi
Di sini kita akan membuat tabel verifikasi untuk menyimpan token.
Schema::create('verifications', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->index();
$table->string('token');
$table->timestamps();
});
Pada Model Verifikasi tambahkan.
protected $primaryKey = 'user_id';
3. Tambahkan Verifikasi Pada Route
routes/web.php
.
Route::get('register/verification', '\App\Http\Controllers\Auth\RegisterController@verification')->name('register.verification');
Sekian untuk kali ini semoga bermanfaat :D untuk lebih lanjut bisa kunjungi link tersebut.