Как создать и получить токен в бэкэнде с помощью Axios? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь создать cookie с токеном моего пользователя из бэкэнда, но он ничего не создает, только если я добавляю res.cookie прямо в маршрут, где он находится ...

Чтопроисходит следующим образом: у меня есть маршрут / auth, / setCookies, / getCookies ... В / auth маршруте пользовательский токен создается с помощью JWT и после этого он отправляется с AXIOS.POST на маршрут / setCookies, но делаеттак что ничего не происходит.Файл cookie не создается.

COOKIES

module.exports.createUserAuthCookie = (req, res) => {
    try {
        const { cookieName, cookieData } = req.body;
        const cookieParams = {
            httpOnly: true,  // COOKIE ENVIADO APENAS POR HTTPS E NÃO DISPONIBILIZADO PARA O CLIENTE JAVASCRIPT VANILLA
            signed:   true,  // COOKIE ASSINADO COM SHA1 BASE64, COM SEGURANÇA DE URL DE 27 BYTES...
            maxAge:   300000 // 5 MINUTOS PARA EXPIRA
        };

        // CRIA UM COOKIE NÃO CRIPTOGRAFADO, PARA AMBIENTE DE DESENVOLVIMENTO
        res.cookie('cookieName', 'cookieData', { plain: true });
        console.log(req)

        // CRIA UM COOKIE CRIPTOGRAFADO, PARA AMBIENTE DE PRDOUÇÃO
        //res.cookie(cookieName, cookieData, cookieParams);

        res.status(200).send({ data: 'COOKIE DE AUTENTICAÇÃO DO USUÁRIO CRIADO COM SUCCESSO!' }).end();
    } catch (error) {
        res.status(500).send({ data: 'OCORREU UM ERRO INTERNO!' }).end();
    }
};

module.exports.getCookies = (req, res) => {
    try {
        // COOKIE NÃO ASSINADO PARA TESTE EM AMBIENTE DE DESENVOLVIMENTO HTTP
        const { cookies } = req;
        console.log(cookies)
        //res.status(200).send({ data: cookies }).end();

        // COOKIE ASSINADO PARA PRODUÇÃO EM AMBIENTE DE DESENVOLVIMENTO HTTPS
        //const { signedCookies } = req;  
        //res.status(200).send({ data: signedCookies }).end();
    } catch (error) {
        console.log(error)
        res.status(500).send({ data: 'OCORREU UM ERRO INTERNO!' }).end();
    }
};

/ auth

const JWTMiddleware = require('../../../middlewares/authentication/user/JWT');
const HTTPService = require('../../../services/HTTP/service');

module.exports.sendResponse = (req, res) => {
    /** @todo CRIAR E INSERIR A FUNÇÃO DE CONSUMO DE USUÁRIOS DA ALIANSCE */

    /** TEMPORÁRIO */
    const {username, password} = req.body;

    if(username !== "1" && password !== "1"){
        res.status(401).send({ data: 'NÃO AUTORIZADO!' }).end();
    } else {
        try {
            // CRIA O TOKEN COM JWT A PARTIR DO USERNAME
            JWTMiddleware.createUserToken(username);

            // CRIA O COOKIE COM O TOKEN DO USUÁRIO
            HTTPService.data = { cookieName: 'user_token', cookieData: JWTMiddleware.token };
            HTTPService.setUserAuthCookie().then(() => {
                res.status(200).send({ data: 'AUTORIZADO!' }).end();   
            }).catch(() => {
                res.status(500).send({ data: 'OCORREU ALGUM ERRO INTERNO!' }).end();
            });  
        } catch (error) {
            res.status(error.response.status).send({ data: error.response.data }).end();
        }
    }
}

http:

const axios = require('axios');

class Service {
    set data(object){ this.axiosData = object; }
    get data(      ){ return this.axiosData;   }

    async setUserAuthCookie(){
        return await axios.post('http://localhost:3000/setUserAuthcookie', { cookieName: 'user_token', cookieData: '123456' });
    }

    async getUserAuthCookie(){
        return await axios.post('http://localhost:3000/getcookies', this.data);
    }
}

module.exports = new Service;
...