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.
68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
import AuthService from '../services/AuthService.js';
|
|
import {validationResult} from 'express-validator';
|
|
import ApiError from './ErrorController.js';
|
|
|
|
class AuthController {
|
|
async register(req, res, next) {
|
|
try {
|
|
const errors = validationResult(req);
|
|
if(!errors.isEmpty()) {
|
|
return next(ApiError.BadRequest('Ошибка при валидации', errors.array()));
|
|
}
|
|
const {email, name, sname, password} = req.body;
|
|
const user = await AuthService.register({email, name, sname, password});
|
|
res.cookie('refreshToken', user.refreshToken, {maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true });
|
|
return res.json(user);
|
|
} catch (e) {
|
|
next(e);
|
|
}
|
|
}
|
|
async login(req, res, next) {
|
|
try {
|
|
const {email, password} = req.body;
|
|
const user = await AuthService.login({email, password});
|
|
res.cookie('refreshToken', user.refreshToken, {maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true });
|
|
return res.json(user);
|
|
} catch (e) {
|
|
next(e);
|
|
}
|
|
}
|
|
async confirm(req, res, next) {
|
|
try {
|
|
const { id } = req.body;
|
|
const confirmation = await AuthService.confirm({ id });
|
|
return res.json(confirmation);
|
|
} 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 {
|
|
const { 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);
|
|
}
|
|
}
|
|
async test(req, res, next) {
|
|
try {
|
|
res.json('test');
|
|
} catch (e) {
|
|
next(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new AuthController(); |