Data & layanan

Autentikasi & otorisasi

Hubungkan user provider, autentikasi dengan session, dan lindungi aksi melalui gate.

Beta · v0.2.0API Lanjit masih dapat berubah sebelum versi stabil. Periksa catatan rilis dan panduan peningkatan sebelum memperbarui.

Lanjit memisahkan proses menemukan pengguna, menjaga sesi login, dan memeriksa izin. Pengelola autentikasi tersedia sebagai auth, sedangkan gerbang otorisasi tersedia sebagai gate.

Penyedia pengguna

Daftarkan provider yang menyediakan pencarian user berdasarkan ID dan credentials.

app.make('auth').useProvider({
  retrieveById: (id) => User.find(id),
  async retrieveByCredentials(credentials) {
    return User.query().where('email', credentials.email).first();
  },
  async validateCredentials(user, credentials) {
    return app.make('hash').check(credentials.password, user.password);
  },
});

Login

Rute login harus memakai middleware session agar identitas dapat disimpan.

Route.post('/login', async (request, response) => {
  const credentials = await request.validate({
    email: ['required', 'email'],
    password: ['required', 'string'],
  });

  const authenticated = await app.make('auth').attempt(request, credentials);
  if (!authenticated) return response.json({ message: 'Credentials invalid.' }, 422);

  return response.redirect('/dashboard');
}).middleware('session', 'csrf');

Melindungi route

Pasang session sebelum auth agar middleware autentikasi dapat membaca session.

Route.get('/dashboard', dashboard)
  .middleware('session', 'auth');

Pengguna yang ditemukan tersedia pada request.user.

Gerbang otorisasi

app.make('gate').define('update-post', (user, post) => {
  return user.id === post.user_id;
});

app.make('gate').authorize('update-post', request.user, post);

authorize() melempar HTTP exception 403 bila ability ditolak. Gunakan allows() jika Anda hanya memerlukan nilai boolean.

Hashing kata sandi

const password = await app.make('hash').make('secret-password');
const valid = await app.make('hash').check('secret-password', password);

Jangan menyimpan password dalam bentuk asli atau memakai layanan enkripsi reversibel untuk password.

Edit halaman ini di GitHub

Ketik untuk mencari di seluruh dokumentasi.