req.tokens
req.tokens
на его наличиеapp.use('/api/v1/users', checkAuth, users)
export function checkAuth(req: Request, res: Response, next) {
Auth.checkAccess(req)
.then(tokens => {
next()
})
.catch(() => {
res.status(401).json('')
})
}
res.cookie('refresh_token', tokens.refresh_token, { httpOnly: true })
res.status(200).json({access_token: `Bearer ${tokens.access_token}`})
api/user, api/friends, api/contacts
и т.д. избежать массового добавления кода по типуrouter.post('/user', async (req: Request, res: Response): Promise<void> => {
... await data
if(req.refreshToken) res.cookie('refreshToken', req.refreshToken, { httpOnly: true })
if(req.accessToken) {
res.status(200).json({data, access_token: `Bearer ${req.accessToken}`})
return
}
res.status(200).json({data})
}
router.post('/user', async (req: Request, res: Response): Promise<void> => {
... await data
res.status(200).json({data})
}
req
и делали next()
res.status(200).json(data)
res.cookie('refresh_token', tokens.refresh_token, { httpOnly: true })
res.status(200).json(
{
data,
access_token: `Bearer ${tokens.access_token}`
}
)
access_token: `Bearer ${tokens.access_token}`
res.cookie('refresh_token', tokens.refresh_token, { httpOnly: true })
middleware
или как-то еще api/user
или как-то до него можно это сделать отдельно, а после уже прислать отдельно ответ с api/user
?api/user
, api/friends
, api/contacts
и т.д. избежать массового добавления кода по типуrouter.post('/user', async (req: Request, res: Response): Promise<void> => {
... await data
if(req.refreshToken) res.cookie('refreshToken', req.refreshToken, { httpOnly: true })
if(req.accessToken) {
res.status(200).json({data, access_token: `Bearer ${req.accessToken}`})
return
}
res.status(200).json({data})
}
router.post('/user', async (req: Request, res: Response): Promise<void> => {
... await data
res.status(200).json({data})
}
req
и делали next()
apiRouter.use(function(req, res, next) {
var token = req.body.token || req.query.token || req.headers['x-access-token'];
if (token) {
jwt.verify(token, app.get('superSecret'), function(err, decoded) {
if (err) {
//Here I can check if the received token in the request expired
if(err.name == "TokenExpiredError"){
var refreshedToken = jwt.sign({
success: true,
}, app.get('superSecret'), {
expiresIn: '5m'
});
request.apiToken = refreshedToken;
next();
}else if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
}
} else {
//If no error with the token, continue
request.apiToken = token;
next();
};
});
} else {
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
});
function modify(req, res, next){
res.body = res.body + "modified";
next();
} и положите туда все свои "повторяющиеся хотелки"
Тогда есть один момент, если токен протух, а рефреш еще жив, мы отдаем инфу доступную только по действующему токену ? res.status(200).json(data)
res.status(200).json({
data,
access_token,
message,
error
})
res.body + "modified";
и по какому принципу это работает?function modify(req, res, next){
res.body = res.body + "modified";
next();
} и положите туда все свои "повторяющиеся хотелки"
res.body.tokens = tokens
next()
req.tokens
Подскажите пожалуйста, что значит
res.body + "modified"; и по какому принципу это работает?
if(request.apiToken)
res.status(200).json(data)
res.cookie('refreshToken', request.apiToken)
res.status(200).json({data, accessToken: request.accessToken))
app.use('/api',function(req, res, next) {
var originalSend = res.send;
res.send = function (){
let temp=JSON.parse(arguments[0]);
temp.mw_add="Some Data From Middleware";
temp.mw_time = Date.now()
res.cookie('MiddleWare','added after route send')
arguments[0] = JSON.stringify(temp);
originalSend.apply(res,arguments);
}
next();
});
app.use('/api', APIRouter);
var express = require('express');
var router = express.Router();
const some_api_data={api_value:35,api_status:"Status OK"}
/* GET API page. */
router.get('/', function(req, res, next) {
res.status(200).json(some_api_data)
});
module.exports = router;
{"api_value":35,"api_status":"Status OK"}
{"api_value":35,"api_status":"Status OK","mw_add":"Some Data From Middleware","mw_time":1700082379016}
+ устанавливается кука Set-Cookie: MiddleWare=added%20after%20route%20send; Path=/
http only cookie
и его всегда можно прочитать при любом запросе, он не удаляетсяAuthorization