You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.7 KiB
JavaScript

import AuthService from '../services/AuthService.js';
import {validationResult} from 'express-validator';
import ApiError from './ErrorController.js';
class AuthController {
async registration(req, res, next) {
try {
const errors = validationResult(req);
if(!errors.isEmpty()) {
return next(ApiError.BadRequest('Ошибка при валидации', errors.array()));
}
const {login, password} = req.body;
const user = await AuthService.registration({login, password});
return res.json(user);
} catch (e) {
next(e);
}
}
async login(req, res, next) {
try {
const {login, password} = req.body;
const user = await AuthService.login({login, password});
res.cookie('refreshToken', user.refreshToken, {maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true });
return res.json(user);
} catch (e) {
next(e);
}
}
async logout(req, res, next) {
try {
const { refreshToken } = req.cookies;
const token = await AuthService.logout(refreshToken);
res.clearCookie('refreshToken');
return res.json(token);
} catch (e) {
next(e);
}
}
async refresh(req, res, next) {
try {
let { refreshToken } = req.cookies;
const user = await AuthService.refresh(refreshToken);
res.cookie('refreshToken', user.refreshToken, {maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true });
return res.json(user);
} catch (e) {
next(e);
}
}
}
export default new AuthController();