Я встроил свой Node API с использованием систем Passport и JWT Auth для пользователя. Пользователь может зарегистрироваться и войти в систему. Мой вопрос касается токена refre sh и наилучшего способа справиться с ним. Я сделал то, что в качестве конечной точки с именем /refresh
я поместил токен refre sh, и я не уверен, что этот поток верен. Должен ли этот refre sh токен вместо этого быть включен в конечную точку входа в систему или это можно сделать так, как я предлагал?
Я хотел бы понять, как лучше всего это сделать, и правильный поток, который я должен продолжать обрабатывать.
Мой код для потока аутентификации на моем API:
Маршруты
export default (app) => {
app.use('/', route);
app.use(passport.initialize());
app.post('/register', Controller.AuthCtrl.registerUser);
app.post(
'/login',
auth.basic,
auth.setUserInfo,
Controller.AuthCtrl.loginUser,
);
app.post(
'/refresh',
passport.authenticate('jwt'),
Controller.AuthCtrl.refreshToken,
);
};
Контроллер:
const AuthController = {
async registerUser(req, res, next) {
try {
const userSchema = {
...req.body,
createdAt: new Date(),
updatedAt: new Date(),
};
const user = await DB.User.register(userSchema, req.body.password);
// eslint-disable-next-line no-underscore-dangle
const token = auth.getToken({ _id: req.user._id });
if (!user) {
Logger.error('User was not created. Something went wrong');
return res
.status(500)
.send('User was not created. Something went wrong');
}
if (!token) {
Logger.error('Token was not created. Something went wrong');
return res
.status(500)
.send('Token was not created. Something went wrong');
}
Logger.info('User and token created successfully.');
return res.status(200).send({ user, token });
} catch (err) {
Logger.error(err);
return next(err);
}
},
async loginUser(req, res, next) {
try {
// eslint-disable-next-line no-underscore-dangle
const token = auth.getToken({ _id: req.user._id });
Logger.info(token);
if (!token) {
Logger.error('Token was not created. Something went wrong');
return res
.status(401)
.send('Token was not created. Something went wrong');
}
return res.status(200).send({ user: req.user, accessToken: token });
} catch (err) {
Logger.error(err);
return next(err);
}
},
async refreshToken(req, res, next) {
try {
// eslint-disable-next-line no-underscore-dangle
const token = auth.getToken({ _id: req.user._id });
Logger.info(token);
if (!token) {
Logger.error('Token was not created. Something went wrong');
return res
.status(401)
.send('Token was not created. Something went wrong');
}
return res.status(200).send({ user: req.user, accessToken: token });
} catch (err) {
Logger.error(err);
return next(err);
}
},
};
Пожалуйста, дайте мне знать в комментариях, если вам нужно добавить дополнительную информацию.
Тем не менее, я хотел бы узнать, какую практику я должен придерживаться, также основываясь на производительности и масштабируемости или что мне следует знать, чтобы улучшить свои навыки разработки.