2016-08-27 4 views
0

Я новичок в паспортный JWT и этот код отправки после запроса от клиента:Почему мой токен Jwt не извлекается?

export function checkLogin() { 

    return function(dispatch) { 
    //check if user has token 
    let token = localStorage.getItem('token'); 

    if (token != undefined) { 

    //fetch user deets 
    var config = { 
     headers: {'authorization': token, 'content-type': 'application/json'} 
    }; 

    axios.post(`${API_URL}/login`, null, config) 
    .then(response => { 
     console.log('response is:', response); 
    }) 
    .catch((error)=> { 
     console.log(error); 
    }); 
    } 
    //user is anonymous 
} 

и этот запрос отправка хорошо с маркером в заголовках, как так:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US,en;q=0.8 
authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE0NzIzMTg2MDE5NTd9.SsCYqK09xokzGHEVFiHtHmq5_HvtWkb8EjQJzwR937M 
Connection:keep-alive 
Content-Length:0 
Content-Type:application/json 
DNT:1 
Host:localhost:3090 
Origin:http://localhost:8080 
Referer:http://localhost:8080/ 
User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36 

На сервере сторона, это правильно направляется через паспорт и попадает этот код:

// setup options for JWT strategy 
const jwtOptions = { 
    jwtFromRequest: ExtractJwt.fromHeader('authorization'), 
    secretOrKey: config.secret, 
    ignoreExpiration: true 
}; 

//create JWT strategy 
const jwtLogin = new JwtStrategy(jwtOptions, function(payload, done) { 

console.log('payload:',payload); // --> payload: { iat: 1472318601957 } 

// see if the user ID in the payload exists in our database 
    User.findById(payload.sub, function(err, user) { 
    if (err) { 
     console.log('auth error'); 
     return done(err, false); 
    } 
    //if it does, call 'done' function with that user 
    if (user) { 
     console.log('user authd:', user); 
     done(null, user); 
      //otherwise, call 'done' function without a user object 
    } else { 
     console.log('unauthd user'); //--> gets here only 
     done(null, false); 
    } 
    }); 
}); 

проблема заключается в том, что функция extractJwt возвращает только часть IAT и не sub часть, которую мне нужно проверить db. Что я делаю не так?

+0

Что вы подразумеваете под iat 1472318601957? – notionquest

+0

Функция tokenForUser (пользователь) { const timestamp = new Date(). GetTime(); // субъект и выдается в момент времени return jwt.encode ({sub: user.id, iat: timestamp}, config.secret); } – Coco

ответ

1

OK Я понял. Я изучил, как работает моя функция генератора токенов. Я использую мангуст и проезжал идентификатор модели пользователя к маркеру, как это:

function tokenForUser(user) { 
    const timestamp = new Date().getTime(); 
    //subject and issued at time 
    return jwt.encode({ sub: user.id, iat: timestamp }, config.secret); 
} 

Я посмотрел на реальную модели, которая была, посылаемой в эту функцию, и получается, что мангуст добавляет идентификатор с ключом _id not id. Как только я сменил это на все, все работает!

function tokenForUser(user) { 
    const timestamp = new Date().getTime(); 
    //subject and issued at time 
    const userid = user['_id']; 
    return jwt.encode({ sub: userid, iat: timestamp }, config.secret); 
} 
Смежные вопросы