2016-11-29 10 views
2

ログイン時にjwt-simpleノードモジュールを使用してトークンを作成しています。 は私のコードですPassport認証機能がノードapiで動作していません

apiRoutes.put('/login', function(req, res, next){ 
    User.findOne({email:req.body.email}, function(err, user){ 
    bcrypt.compare(req.body.password, user.password, function(err, result){ 
     if(result){ 
     var token=jwt.encode(user,config.secret); 
     return res.json({token:token});   
     }else{ 
     return res.json("Incorrect Email and Password") 
     } 
    }) 
    }) 
}); 

トークンが正常に作成されています。 /dashboardルートでユーザーを認証しようとしています。

apiRoutes.get('/dashboard', passport.authenticate('jwt', { session: false}), function(req, res) { 
    var token=getToken(req.headers); 
    if(token){ 
    var decode=jwt.decode(token, config.secret); 
    User.findOne({name:decode.name}, function(err, user){ 
     if(err){res.json(err)} 
     if(!user){ 
      return res.status(403).send({success:false, msg:'Authentication Failed'}) 
     }else{ 
      res.json({success:true, msg:'Welcome in the Area' +user.name+'!'}) 
     } 
    }) 
    }else{ 
    return res.status(403).send({success:false, msg:'No Token Found'}) 
    } 

    }); 


getToken = function (headers) { 
     if (headers && headers.authorization) { 
     var parted = headers.authorization.split(' '); 
     if (parted.length === 2) { 
      return parted[1]; 
     } else { 
      return null; 
     } 
     } else { 
     return null; 
     } 
    }; 

問題は、私は、私はその後、ルートの印刷success:false, msg:'No Token Found'からパスポート認証機能passport.authenticate('jwt', { session: false})を削除するときには、Unauthorizedを示すとpostmanに、このAPIを打っていたときに、ということです。 この問題を解決する方法がわかりません。私のコードを見て、私の誤りがどこにあるのか教えてください。

ヘルプありがとうございます。 ありがとう

+0

passport.authenticate( 'jwt'、{session:false})を使用している場合の目的は何ですか?デバッグやログ記録の際にトークンとして与えられるもの。 – Dnyanesh

+1

'passport.authenticate( 'jwt'、{session:false})'がトークンのチェックに有効かどうかを確認しています。しかし、私がルート上でそれを使用しているとき、それは 'Unauthorized'を与えます。それは 'token'が有効でないか、何の意味ですか?私は取得していません –

答えて

0

私の理解によると、 passport.authenticacte()関数を使用する前に戦略を定義する必要があります。 this linkを確認してください。そして、あなたは単純なjwtの代わりにpassport-jwt moduleを使うことができると思います。それが役に立てば幸い。

+0

私は[こちら](https://devdactic.com/restful-api-user-authentication-1/)チュートリアルに従っています。 jwt-simpleも使用しています。 –

+0

チュートリアルのとおり、jwt戦略を作成しましたか?チュートリアルの「戦略とユーザーの作成」のセクションを確認してください。 –

+0

はい既に作成済みです。 –

関連する問題