Как передать refre sh токен контроллеру с помощью следующей функции - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь построить некоторые остальные API-интерфейсы с использованием узла express и mongoDB. Мне удалось создать jsonwebtoken после входа пользователя. и маршруты, которые будут доступны после входа в систему, потребуют этот токен.

Теперь у меня есть промежуточное ПО для проверки маршрутов, которые доступны только в том случае, если пользователь предоставляет токен, который генерируется во время входа в систему. Теперь, когда срок действия токена истекает, я пытаюсь заново сгенерировать токен с помощью старого токена, расшифровав его, и хочу передать его следующему контроллеру.

Сейчас он генерирует новый токен, но я не могу не передать его следующему контроллеру.

Как я могу отправить токен refre sh следующему контроллеру, и в ответе контроллера появится новый ключ с именем refreshToken, который будет содержать новый токен, и из моего внешнего интерфейса я снова сохраню это в локальном хранилище.

Аутентификация Middleware -

exports.validateToken = async (req, res, next) => {
    var response_status = {};
    var response_dataset = {};
    var response_data = {};

    let authorizationHeaader = req.headers['x-access-token'] || req.headers['authorization'];
    if(authorizationHeaader){
        if (authorizationHeaader.startsWith('Bearer ') || authorizationHeaader.startsWith('bearer ')) {
            // Remove Bearer from string
            var token = authorizationHeaader.slice(7, authorizationHeaader.length);
        }
        if (token) {
            //Passing the token helpers for verification
            global.Helpers.verifyToken(token)
            .then(async jwtDecrept => { 
                req.body.user = jwtDecrept; 
                next();
            }).catch(async err => {
                if(err.name === 'TokenExpiredError') {
                    const payload = jwt.verify(token, process.env.JWT_SECRET, {ignoreExpiration: true});
                    let userDetails = {
                        id: payload.id,
                        email: payload.email,
                        name: payload.name,
                        role: payload.role
                    };
                    let Token = global.Helpers.createToken(userDetails);
                    token = Token;
                    console.log(token);
                    next();
                }
                else {
                    response_status.message = 'Authentication error. Token is not valid.';
                    response_data.dataset = response_dataset;
                    response_data.status = response_status;
                    res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
                    res.send({ response: response_data });
                }
            });
        } else {
            response_status.message = 'Authentication error. Token is required.';
            response_data.dataset = response_dataset;
            response_data.status = response_status;
            res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
            res.send({ response: response_data });
        }
    }else {
        response_status.message = 'Authentication error. Token is required.';
        response_data.dataset = response_dataset;
        response_data.status = response_status;
        res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
        res.send({ response: response_data });
    }
}

Следующая Middlewar -

exports.profile = async (req, res) => {
    var response_status = {};
    var response_dataset = {};
    var response_data = {};

    try {
        console.log(req);
        let user = await User.findById(req.body.user.id).select('-password');
        response_status.message = "User Profile Fetched Successfully.";
        response_data.dataset = user;
        (response_data.status = response_status);

        res.status(process.env.HTTP_RESPONSE_OK);
        res.send({ response: response_data });
    } catch (error) {
        response_dataset = error;
        response_status.message = error.message;
        response_data.dataset = response_dataset;
        (response_data.status = response_status);

        res.status(process.env.HTTP_RESPONSE_INTERNAL_SERVER_ERROR);
        res.send({ response: response_data });
    }
} 

Маршруты -

const express = require('express');
const router = express.Router();
const authenticate = require('../middlewares/authenticate');
const User = require('../controllers/user');

router.post('/me', authenticate.validateToken, User.profile);
router.post('/allUsers', authenticate.validateToken, User.allUsers);

module.exports = router; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...