Middleware dan Autentikasi
Tambahkan logika lintas fungsi dan lindungi rute.
Middleware dan Autentikasi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Apa Itu Perantara?
Perantara berada di antara permintaan yang masuk dan penangan rute Anda, serta dapat memeriksa atau mengubah permintaan maupun respons. Perantara sangat cocok untuk pencatatan, CORS, penanganan kesalahan, dan autentikasi.
import VaporProtokol Perantara
Perantara kustom mengikuti AsyncMiddleware dan mengimplementasikan respond(to:chainingTo:). Lakukan pekerjaan Anda, lalu panggil next.respond(to:) untuk melanjutkan rantai.
struct LogMiddleware: AsyncMiddleware {
func respond(to req: Request, chainingTo next: AsyncResponder) async throws -> Response {
req.logger.info("Incoming: " + req.url.path)
return try await next.respond(to: req)
}
}Mendaftarkan Perantara Secara Global
Tambahkan perantara ke app.middleware agar dijalankan untuk setiap permintaan. Urutan penting—perantara dijalankan sesuai urutan penambahannya.
app.middleware.use(LogMiddleware())Perantara Bawaan
Vapor menyediakan perantara yang berguna: ErrorMiddleware mengubah kesalahan yang dilempar menjadi respons, FileMiddleware menyajikan berkas statis, dan CORSMiddleware menangani permintaan lintas asal.
let cors = CORSMiddleware(configuration: .default())
app.middleware.use(cors)Perantara Khusus Rute
Terapkan perantara hanya pada beberapa rute dengan mengelompokkannya bersama perantara tersebut. Rute di dalam kelompok akan dilindungi, sedangkan rute lainnya tidak.
let protected = app.grouped(LogMiddleware())
protected.get("dashboard") { req in "Secret dashboard" }Konsep Autentikasi
Sistem autentikasi Vapor memiliki dua bagian: model Authenticatable (pengguna Anda) dan perantara Authenticator yang memverifikasi kredensial serta menyimpan pengguna dalam permintaan.
final class AppUser: Model, Content, Authenticatable {
static let schema = "users"
@ID(key: .id) var id: UUID?
@Field(key: "username") var username: String
@Field(key: "password_hash") var passwordHash: String
init() {}
}Menulis Authenticator Dasar
AsyncBasicAuthenticator menangani autentikasi HTTP Basic. Implementasikan authenticate(basic:for:): cari pengguna, verifikasi kata sandinya, lalu panggil req.auth.login(user) jika berhasil.
struct UserAuthenticator: AsyncBasicAuthenticator {
func authenticate(basic: BasicAuthorization, for req: Request) async throws {
guard let user = try await AppUser.query(on: req.db)
.filter(\.$username == basic.username).first() else { return }
if try Bcrypt.verify(basic.password, created: user.passwordHash) {
req.auth.login(user)
}
}
}Melakukan Hash pada Kata Sandi dengan Bcrypt
Jangan pernah menyimpan kata sandi biasa. Vapor menyertakan Bcrypt untuk membuat hash saat pendaftaran dan melakukan verifikasi saat login. Hashing bersifat satu arah; verifikasi membandingkan kandidat dengan hash yang tersimpan.
let hash = try Bcrypt.hash("s3cret")
let ok = try Bcrypt.verify("s3cret", created: hash) // trueMelindungi Rute dengan Penjaga
Gabungkan authenticator dengan AppUser.guardMiddleware(), yang menolak permintaan tanpa autentikasi dengan status 401. Kelompokkan rute yang dilindungi di balik keduanya.
let protected = app.grouped(
UserAuthenticator(),
AppUser.guardMiddleware()
)
protected.get("me") { req -> String in
let user = try req.auth.require(AppUser.self)
return user.username
}Membaca Pengguna yang Terautentikasi
Di dalam penangan terlindungi, ambil pengguna yang sudah masuk dengan req.auth.require(_:) (menghasilkan galat jika pengguna tidak ada) atau req.auth.get(_:) (opsional). Dengan cara ini, Anda membatasi cakupan data pada pengguna saat ini.
app.get("profile") { req -> String in
let user = try req.auth.require(AppUser.self)
return "Hello, " + user.username
}Autentikasi Token
Untuk API, token pembawa umum digunakan. Model token memenuhi ModelTokenAuthenticatable, sehingga Vapor dapat memverifikasi header Authorization: Bearer ... dan memuat pengguna terkait secara otomatis.
let tokenProtected = app.grouped(
UserToken.authenticator(),
AppUser.guardMiddleware()
)Pemeriksaan Singkat: Perangkat Perantara dan Autentikasi
Pastikan pemahaman Anda.
Ringkasan: Perangkat Perantara dan Autentikasi
Anda telah mempelajari cara mencegat dan mengamankan permintaan:
- Perangkat perantara (
AsyncMiddleware) membungkus permintaan; daftarkan secara global atau per kelompok rute. - Gunakan komponen bawaan seperti
ErrorMiddlewaredanCORSMiddleware. - Jadikan pengguna
Authenticatable, tulisAuthenticator, lalu panggilreq.auth.login. - Lakukan pencincangan dengan
Bcrypt, lindungi rute denganguardMiddleware(), lalu baca pengguna melaluireq.auth.require.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Middleware dan Autentikasi” gratis?
Ya — teks lengkap “Middleware dan Autentikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Middleware dan Autentikasi”?
Tambahkan logika lintas fungsi dan lindungi rute. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Middleware dan Autentikasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perutean dan Penanganan Permintaan
- Pengodean Konten dan JSON
- ORM Fluent dan Model
- Middleware dan Autentikasi