2017-05-19 10 views
0

私はJWTを使ってユーザーを認証していますが、ユーザー名のような情報もトークンに追加したいと考えています。JWTにユーザーの情報を追加するにはどうすればいいですか?

app.post('/authenticate', function(req, res){ 
    User.findOne({ 
     username: req.body.username 
    }, function(err, user){ 

     if(!user){ 
     console.log('Authentication failed. User not found'); 
     } 
     else if(user){ 
     if(user.password != req.body.password){ 
      console.log('Authentication failed. Wrong password'); 
     } 
     else{ 

      var token = jwt.sign(user, app.get('secretWord'), { 
      expiresIn : 10800, 
      }); 

      res.send({ 
      token: token 
      }); 
     } 
     } 
    }) 
    }); 

私はトークンにユーザー名を関連付けることができます方法:

これは、私は、ユーザーを認証してきた後、私はトークンを作成する方法ですか?

var token = jwt.sign(user, app.get('secretWord'), { 
       expiresIn : 10800, 
       username : user.username 
       }); 

をしかし、それはエラーがスローされます:私が試した「ValidationErrorを: 『ユーザ名は、』許可されていません

答えて

0

最も簡単な解決策は、独立変数としてJWTのペイロードにユーザ名を挿入することであろう

ただし、ユーザーオブジェクトを使用してトークンを生成することをお勧めします。この方法を使用すると、トークンにユーザーのプロパティに関する情報が含まれていると判断された場合、ユーザーを簡単に見つけることができます。

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

「トークンの認証と作成」に直接進むことはできませんが、node.jsでこれを行う方法の良い例があります。

+1

私は本当にそのようなペイロードとしてデータベースから 'user'レコードを渡すことをお勧めしません!これにより、ユーザーのパスワードがトークンに含まれるようになります。 JWTのペイロードは暗号化されていないので、あなたのトークンが流出した場合、そこにパスワードを持っていれば悪いニュースになります。 –

+0

ああ、私は既にトークンを生成するためにユーザーオブジェクトを使用しています...それでは、後でトークンからユーザー名を取得するにはどうすればいいですか? – Mit

+0

新しいオブジェクトを作成し、それをペイロードとして使用する: 'var payload = {username:user.username};' –

関連する問題