Перейти к содержанию

Auth

JWT + Google OAuth аутентификация с поддержкой B2B компаний.

Возможности

  • Регистрация с привязкой к компании (БИН)
  • JWT токены
  • Google OAuth
  • Сброс пароля по email
  • Роли и права

Использование

Регистрация

POST /api/auth/register
{
  "email": "user@company.kz",
  "password": "secret123",
  "firstName": "Иван",
  "lastName": "Иванов",
  "bin": "123456789012",  // БИН компании
  "companyName": "ТОО Компания"
}

Логин

POST /api/auth/login
{
  "email": "user@company.kz",
  "password": "secret123"
}

// Response
{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": 1,
    "email": "user@company.kz",
    "firstName": "Иван",
    "role": "employee",
    "companyId": 1,
    "company": { "name": "ТОО Компания", "bin": "123456789012" }
  }
}

Проверка БИН

GET /api/auth/check-bin/123456789012

// Если компания существует
{ "exists": true, "company": { "name": "ТОО Компания", "status": "ACTIVE" } }

// Если не существует
{ "exists": false }

Google OAuth

GET /api/auth/google           // Инициация OAuth
GET /api/auth/google/callback  // Callback
GET /api/auth/oauth-status     // Проверка доступности OAuth

Роли по умолчанию

const permissions = {
  admin: [
    'view_deals', 'create_deals', 'edit_deals', 'delete_deals',
    'manage_users', 'manage_roles', 'view_reports', 'export_data'
  ],
  manager: [
    'view_deals', 'create_deals', 'edit_deals', 'view_reports'
  ],
  employee: [
    'view_deals', 'create_deals', 'edit_deals'
  ],
  viewer: ['view_deals']
};

Middleware

const { auth, checkPermission } = require('./middleware/auth');

// Требует авторизации
router.get('/protected', auth, (req, res) => {
  // req.userId, req.user доступны
});

// Требует конкретного права
router.post('/deals', auth, checkPermission('create_deals'), (req, res) => {
  // ...
});