Verifikasi Email di Aplikasi Multi-Tenant
Dalam panduan ini, kita akan mengeksplorasi proses penerapan verifikasi email di aplikasi Laravel multi-tenant dengan frontend Nuxt.js. Memastikan verifikasi email yang tepat sangat penting untuk menjaga keamanan pengguna dan integritas data.
Kami akan membahas langkah-langkah yang diperlukan untuk mengonfigurasi backend Laravel Anda untuk multi-tenancy, mengirim email verifikasi setelah pendaftaran pengguna, dan menangani proses verifikasi dengan lancar. Dengan mengikuti panduan ini, Anda akan dapat mengelola verifikasi email secara efektif dalam arsitektur multi-penyewa Anda.
Memerintah | Keterangan |
---|---|
Tenant::create() | Membuat instans penyewa baru dengan nama tertentu, digunakan untuk aplikasi multi-penyewa. |
Artisan::call() | Menjalankan perintah Artisan secara terprogram, di sini digunakan untuk menyemai database dalam konteks penyewa. |
event(new Registered($user)) | Memicu peristiwa Terdaftar untuk mengirim email verifikasi ke pengguna yang baru dibuat. |
$tenant->$tenant->run() | Menjalankan fungsi panggilan balik dalam koneksi database penyewa, mengisolasi operasi spesifik penyewa. |
$tenant->domains()->$tenant->domains()->create() | Mengaitkan domain baru dengan penyewa yang dibuat, sehingga memfasilitasi identifikasi penyewa berbasis domain. |
hash_equals() | Membandingkan dua hash dengan cara serangan waktu yang aman, digunakan untuk memverifikasi token verifikasi email. |
User::markEmailAsVerified() | Menandai email pengguna sebagai terverifikasi dan memperbarui kolom database terkait. |
app(VerifyEmailResponse::class) | Mengembalikan respons yang menunjukkan status verifikasi email, yang digunakan dalam proses verifikasi email. |
AuthorizationException | Dilempar ketika pemeriksaan otorisasi gagal, memastikan hanya permintaan verifikasi email valid yang diproses. |
Penjelasan Alur Verifikasi Email
Skrip pertama menunjukkan cara menangani registrasi pengguna di aplikasi Laravel multi-tenant yang terintegrasi dengan Nuxt.js. Saat pengguna mendaftar, penyewa baru dibuat menggunakan Tenant::create() memerintah. Dalam konteks penyewa, database diunggulkan dengan data awal melalui Artisan::call() memerintah. Pengguna baru kemudian dibuat dan event(new Registered($user)) perintah memicu pengiriman email verifikasi. Proses ini memastikan bahwa setiap penyewa beroperasi secara terpisah, menjaga integritas dan pemisahan data.
Skrip kedua menangani proses verifikasi email. Saat pengguna mengeklik tautan verifikasi, User::findOrFail($request->route('id')) perintah mengambil pengguna berdasarkan ID. Hash verifikasi email diperiksa menggunakan hash_equals(), memastikan keamanan. Jika hashnya cocok, email pengguna ditandai sebagai terverifikasi dengan User::markEmailAsVerified(), dan itu event(new Verified($user)) perintah memicu tindakan selanjutnya. Skrip ini beroperasi tanpa mengharuskan pengguna untuk login, memberikan pengalaman verifikasi yang lancar.
Menerapkan Verifikasi Email di Laravel dengan Nuxt.js untuk Aplikasi Multi-Tenant
Skrip Backend Laravel untuk Registrasi Pengguna dan Verifikasi Email
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Tenant;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Hash;
use Illuminate\Auth\Events\Registered;
class AuthController extends Controller {
public function register(Request $request) {
$tenant = Tenant::create(['name' => $request->first_name . ' Team']);
$tenant->run(function () use ($request) {
Artisan::call('db:seed', ['--class' => 'DatabaseSeeder']);
$user = User::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'password' => Hash::make($request->password),
'phone_number' => $request->phone_number,
]);
event(new Registered($user));
});
$tenant->domains()->create(['domain' => $request->domain_name]);
return response()->json(['message' => 'Successfully created - Check your email to verify!']);
}
}
Menangani Verifikasi Email Tanpa Persyaratan Login
Pengontrol Laravel untuk Verifikasi Email
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Verified;
use Illuminate\Auth\Access\AuthorizationException;
use Laravel\Fortify\Contracts\VerifyEmailResponse;
class VerifyEmailController extends Controller {
public function __invoke(Request $request) {
$user = User::findOrFail($request->route('id'));
if (!hash_equals(sha1($user->getEmailForVerification()), (string) $request->route('hash'))) {
throw new AuthorizationException;
}
if ($user->hasVerifiedEmail()) {
return app(VerifyEmailResponse::class);
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
return app(VerifyEmailResponse::class);
}
}
Verifikasi Email Tanpa Login Pengguna
Aspek penting dari verifikasi email dalam aplikasi Laravel multi-tenant adalah memastikan bahwa prosesnya berjalan lancar tanpa mengharuskan pengguna untuk login. Hal ini dapat dicapai dengan menyesuaikan alur verifikasi untuk melewati persyaratan login. Tautan verifikasi email berisi hash unik, dan ketika pengguna mengklik tautan tersebut, aplikasi memverifikasi hash ini untuk memastikan keaslian permintaan.
Dengan menerapkan pengontrol khusus untuk menangani verifikasi email, seperti VerifyEmailController, Anda dapat mengelola logika verifikasi tanpa menerapkan autentikasi pengguna. Pendekatan ini meningkatkan pengalaman pengguna dengan memungkinkan mereka memverifikasi alamat email langsung dari tautan email, memastikan proses yang lebih lancar dan ramah pengguna.
Pertanyaan Umum Tentang Verifikasi Email di Aplikasi Laravel Multi-Tenant
- Bagaimana cara membuat penyewa baru di Laravel?
- Anda dapat membuat penyewa baru menggunakan Tenant::create() memerintah.
- Apa tujuan penyemaian database selama pembuatan penyewa?
- Penyemaian database dengan Artisan::call('db:seed') menginisialisasi data spesifik penyewa.
- Bagaimana peristiwa verifikasi email dipicu?
- Peristiwa verifikasi email dipicu menggunakan event(new Registered($user)) memerintah.
- Mengapa menggunakan hash_equals() untuk verifikasi email?
- Itu hash_equals() perintah menyediakan cara aman untuk membandingkan token verifikasi.
- Bisakah verifikasi email berfungsi tanpa login pengguna?
- Ya, dengan menyesuaikan alur verifikasi dengan pengontrol sejenisnya VerifyEmailController.
- Bagaimana cara menandai email sebagai terverifikasi?
- Menggunakan User::markEmailAsVerified() perintah untuk memperbarui status verifikasi.
- Apa yang terjadi setelah email diverifikasi?
- Suatu peristiwa dipicu menggunakan event(new Verified($user)) untuk tindakan lebih lanjut.
- Bagaimana cara menangani kegagalan verifikasi?
- Lempar sebuah AuthorizationException untuk mengelola upaya verifikasi yang tidak valid.
- Apakah perlu melampirkan domain ke setiap penyewa?
- Ya, mengaitkan domain dengan $tenant->domains()->create() membantu mengidentifikasi penyewa.
Menyelesaikan Verifikasi Email di Aplikasi Multi-Penyewa
Menerapkan verifikasi email dalam aplikasi Laravel multi-tenant dengan frontend Nuxt.js sangat penting untuk menjaga keamanan pengguna dan integritas data. Dengan membuat pengontrol khusus dan memanfaatkan fitur bawaan Laravel, Anda dapat memastikan proses verifikasi yang lancar. Pendekatan ini memungkinkan pengguna untuk memverifikasi akun mereka langsung dari tautan verifikasi tanpa perlu masuk, sehingga meningkatkan pengalaman pengguna secara keseluruhan. Dengan mengikuti langkah-langkah dan contoh yang diberikan, Anda dapat mengelola verifikasi email secara efektif di aplikasi multi-penyewa Anda, memastikan sistem yang kuat dan aman.