Как хранить токен JWT в файлах cookie и использовать его для аутентификации - PullRequest
0 голосов
/ 26 мая 2020

Итак, я делаю простое приложение для магазина игр с функцией входа / регистрации, индексной страницей с играми, которые нужно «купить», страницей, где пользователь может увидеть купленные игры, и диаграммой, которая поможет пользователям покупайте хорошие игры. Мне удалось заставить работать мои функции входа и регистрации, он также создает токен для пользователя, и я хочу, чтобы этот токен сохранялся в файлах cookie, когда пользователь регистрируется, а затем при перенаправлении на страницу индекса он проверяет токен, хранящийся в файлах cookie, на разрешить пользователю войти, и это проблема, токен хранится в файлах cookie, но он говорит, что мой req.cookies.token не определен, поэтому он продолжает выдавать мне сообщение об ошибке вместо перенаправления на страницу индекса, я не уверен, что я делаю не так

это моя служба авторизации

const cookieParser = require("cookie-parser");
var jwt = require('jsonwebtoken');
require("dotenv-safe").config();

exports.authorize = function(req, res, next){
    const token = req.body.token || req.query.token || req.cookies.token || req.headers['x-access-token'];
    console.log(req.cookies.token);
    if (!token){
        res.status(401).json({auth: false, message: 'You need to Login to access this page.'});
    } else {
        jwt.verify(token, process.env.SECRET, function (error, decode){
            if (error){
                res.status(401).json({auth: false, message: 'Invalid Token.'});
            } else {
                next();
            }
        });
    }
}

Это моя функция входа

var jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');
require("dotenv-safe").config();

exports.login = async(mail, pass) => {    
    const user = await Usuario.findOne({ email: mail });
    const id = user._id;
    if (user.email === mail && user.ValidPassword(pass)){
        const token = jwt.sign({id}, process.env.SECRET, {expiresIn: 18000}); //5 min
        return res.cookie('x-access-token', token, { secure: false, httpOnly: true});
        return token;
    } else{
        throw({status: 404, code: 'User not Found.', message: 'Try another E-mail.'});
    }
}

1 Ответ

0 голосов
/ 26 мая 2020

я решил это сейчас, я думаю, я отправлял токен в куки в неправильном месте, я изменил следующее в моем auth.service:

exports.authorize = function(req, res, next){
const token = req.body.token || req.query.token || req.cookies['x-access-token'] || req.headers['x-access-token'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...