2017-01-16 7 views
0

私はPassportを認証、特にJWT戦略に使用しています。私はユーザーが作成されたときに新しいトークンを作成することができますが、認証が必要なルートへのリクエストのヘッダーにそのトークンを使用すると、リクエストがハングアップします。これらのPOST/GETリクエストをテストするためにPostmanを使用しています。Passport.authenticateは応答を送信しません

は、ここでユーザーをサインアップするための私の初期設定です:

const User = require('../db/models/User'); 
const jwt = require('jsonwebtoken'); 

function userToken(user) { 
    return jwt.sign({ 
    id: user.id, 
    }, process.env.JWT_SECRET); 
} 

exports.signup = function(req, res, next) { 
    const email = req.body.email.toLowerCase(); 
    const password = req.body.password.toLowerCase(); 

    User.findOne({ 
    where: { email }, 
    }).then(function(user) { 
    if (!user) { 
     User.create({ 
     email, 
     password, 
     }) 
     .then(function(user) { 
     return res.send({ token: userToken(user) }); 
     }); 
    } 
    if (user) { 
     return res.send({ message: 'That user is in use' }); 
    } 
    }); 
}; 

ここに私のパスポートの設定があります:

const passport = require('passport'); 
const JwtStrategy = require('passport-jwt').Strategy; 
const ExtractJwt = require('passport-jwt').ExtractJwt; 
const User = require('../db/models/User'); 

const jwtOptions = { 
    jwtFromRequest: ExtractJwt.fromHeader('authorization'), 
    secretOrKey: process.env.JWT_SECRET, 
}; 

const jwtLogin = new JwtStrategy(jwtOptions, function(payload, done) { 
    User.findOne({ 
    where: { id: payload.id }, 
    }, function(err, user) { 
    if (err) { return done(err, false); } 
    if (user) { return done(null, user); } 
    return done(null, false); 
    }); 
}); 

passport.use(jwtLogin); 

は、ここに私の保護されたルートは次のようになります。

const passport = require('passport'); 

const requireAuth = passport.authenticate('jwt', { session: false }); 

module.exports = function router(app) { 
    app.get('/', requireAuth, function(req, res) { 
    res.send({ 'hi': 'there' }); 
    }); 
}; 

は、ここで私は私の端末で見るものです:

Executing (default): SELECT "id", "username", "email", "password", "photo", "createdAt", "updatedAt" FROM "users" AS "user" WHERE "user"."id" = 15; 

だから私はそれが正しくユーザーIDの照会し、それを探していますことを知っている、しかし、それだけではなく、サービス提供よりも、この時点でハングアップ私は応答します。

問題が何であるかわからないので、すべての提案を歓迎し、感謝します。ありがとうございました!

... 

const jwtLogin = new JwtStrategy(jwtOptions, function(payload, done) { 
    User.findOne({ 
    where: { id: payload.id } 
    }) 
    .then(user => { 
    if (user) { 
     done(null, user); 
    } else { 
     done(null, false); 
    } 
    }) 
    .catch(err => { 
    if (err) { return done(err, false); } 
    }); 
}); 

... 

これは私の問題を解決し、私の応答を返している:

答えて

0

は私がSequelizeを使用していますので、それはそうのようなキャッチしてエラーを処理することに気づきました。

関連する問題