Mithril.js — это лёгкий и современный фронтенд-фреймворк для построения одностраничных приложений (SPA). Встраивание механизмов аутентификации и авторизации в приложения на Mithril требует понимания работы маршрутизации, компонентов и управления состоянием.
Аутентификация — процесс проверки подлинности пользователя. В Mithril её можно реализовать на уровне компонентов и сервисов. Ключевым элементом является хранение токенов доступа и управление состоянием авторизованного пользователя.
Пример структуры сервиса аутентификации:
// auth.js
import m from 'mithril';
const Auth = {
user: null,
token: null,
login(email, password) {
return m.request({
method: 'POST',
url: '/api/login',
body: { email, password }
}).then(result => {
this.token = result.token;
this.user = result.user;
});
},
logout() {
this.token = null;
this.user = null;
},
isAuthenticated() {
return !!this.token;
}
};
export default Auth;
Ключевые моменты:
login выполняет HTTP-запрос и сохраняет данные
при успешной аутентификации.isAuthenticated упрощает проверку состояния
авторизации в компонентах.Mithril использует m.route для маршрутизации. Чтобы
ограничить доступ к определённым страницам, проверку состояния можно
внедрять на этапе разрешения маршрута.
import Auth from './auth';
const ProtectedRoute = (component) => {
return {
onmatch() {
if (!Auth.isAuthenticated()) {
m.route.set('/login');
return;
}
return component;
}
};
};
Использование:
m.route(document.body, '/dashboard', {
'/login': LoginComponent,
'/dashboard': ProtectedRoute(DashboardComponent)
});
Пояснения:
onmatch вызывается перед отображением компонента.Для хранения токенов доступа применяются разные стратегии:
Важные аспекты:
В дополнение к проверке маршрутов, авторизацию можно внедрять на уровне отдельных UI-компонентов, скрывая или показывая элементы в зависимости от прав пользователя.
const AdminPanel = {
view() {
return Auth.user && Auth.user.role === 'admin'
? m('div', 'Панель администратора')
: m('div', 'Доступ запрещён');
}
};
Особенности:
view.Auth.Mithril предоставляет m.request для запросов к серверу.
Токены доступа можно передавать в заголовках:
m.request({
method: 'GET',
url: '/api/protected-data',
headers: { 'Authorization': `Bearer ${Auth.token}` }
}).then(data => {
console.log(data);
});
Authorization обеспечивает
контроль доступа на сервере.const DashboardComponent = {
oninit() {
if (!Auth.isAuthenticated()) m.route.set('/login');
else {
m.request({
method: 'GET',
url: '/api/dashboard',
headers: { 'Authorization': `Bearer ${Auth.token}` }
}).then(data => this.data = data);
}
},
view() {
if (!Auth.isAuthenticated()) return null;
return m('div', [
m('h1', 'Дашборд'),
this.data ? m('pre', JSON.stringify(this.data, null, 2)) : m('p', 'Загрузка...')
]);
}
};
oninit выполняет проверку авторизации и подгрузку
защищённых данных.view рендерит контент только после успешной
аутентификации.Auth.isAuthenticated() вместо дублирования
условий.Эти подходы обеспечивают масштабируемость и надёжность системы аутентификации в приложениях на Mithril.