2016-04-30 4 views
0

Я пытаюсь выполнить проверку подлинности на стороне сервера.Проверка подлинности на стороне сервера jwt JsonWebTokenError

В стороне сервера авторизации()

var jwt = require('jsonwebtoken'); 
.... 
if (user.hash != hash(pass, user.salt)) { 
    return invalid("Wrong password"); 
} 

var token = jwt.sign(user, 'superSecret'); 

res.json({ 
     success: true, 
     message: '', 
     auth_token: token 
}); 

В стороне клиента HTTP

createHero(hero: Hero) { 
     let body = JSON.stringify({ hero }); 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let authToken = localStorage.getItem('auth_token'); 
     headers.append('Authorization', `Bearer ${authToken}`); 
     let options = new RequestOptions({ headers: headers });  

     this.http.post(`${this._baseUrl}create/`, body, options) 
       .map(response => response.json()) 
       .subscribe(data => { 
            this._dataStore.heroes.push(data); 
            this._dataStore.hero = data; 
            this._heroObserver.next(this._dataStore.hero); 
            }, 
          error => this.handleError('Could not create hero.') 
         ); 
    } 

В стороне сервера проверки

var token = req.headers.authorization; 
    var h = req.headers; 

    // decode token 
    if (token) { 

    // verifies secret and checks exp 
    aaa = jwt.verify(token, 'superSecret', function(err, decoded) { 
     console.log(decoded);  
     if (err) { 
     return res.json({ success: false, message: 'Failed to authenticate token on API server.' });  
     } else { 
     // if everything is good, save to request for use in other routes 
     req.decoded = decoded;  
     next(); 
     } 
    }); 
    console.log(aaa); 
    } else { 
    // if there is no token return an error 
    return res.status(403).send({ 
     success: false, 
     message: 'No token provided.' 
    });  
    } 

я получил маркер обратно на сервер правильно. авторизация: «Носитель .....»

Но он не может подтвердить. Я получил недопустимый токен JsonWebTokenError.

Может ли кто-нибудь помочь указать, что я пропустил?

ответ

0

знак() и проверка() имеют синхронизацию и асинхронную версию. sign() sync создает строку токена, а async создает объект-токен. Я использовал версию sync для знака(), поэтому мне нужно использовать версию синхронизации для декодирования символа строки обратно. например

if (token) { 
    try { 
     var decoded = jwt.verify(token, 'superSecrete'); 
    } catch (err) { 
     return res.json({ success: false, message: 'Failed to authenticate token on API server.' }); 
    } 
    req.decoded = decoded;  
    next(); 
    } else { 
    return res.status(403).send({ 
     success: false, 
     message: 'No token provided.' 
    });  
    } 
Смежные вопросы