1
私はこれに従っています(YouTube Link)ノードチュートリアルの原因私は友人のためのWebアプリケーションを構築する必要があります。彼はDynamo DBとノードjsを使う必要があり、私はこのアプリを作っている間に学んでいます。私は素晴らしいことをしていましたが、今は止まっています。NodeJSの関数間で変数を渡す
私はJWTトークンを取得しようとしていますが(ビデオに記載されています)、何も起こりません。ここに私のルートがあります:
router.post('/authenticate', (req, res, next) => {
const username = req.body.username;
const password = req.body.password;
USER.getUserByUsername(username, (err, user) => {
if (err) throw err;
if (!user) {
return res.json({
success: false,
"msg": "User not found"
});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign(user, secret.secret, {
expiresIn: 86400
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
user: user.username,
password: user.password,
email: USER.email
}
});
}
});
});
});
ここではパスポートのjsコード
module.exports = function (passport) {
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = secret;
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
USER.getUserbyUsername(jwy_payload.user2, (err, user) => {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
そして、ここでは、モデル内の関数は、最後の機能は、ユーザ名+パスワードを印刷しますこと
module.exports.getUserByUsername = function (user, callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "Usuarios",
KeyConditionExpression: "#us = :uuuu",
ExpressionAttributeNames: {
"#us": "username"
},
ExpressionAttributeValues: {
":uuuu": user
}
};
docClient.query(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
data.Items.forEach(function (item) {
console.log(item.username + ": " + item.password);
let user = item.username;
console.log(user);
return user;
});
}
});
}
をuser.jsのだですクエリが機能していますが、それだけです。ユーザー名とパスワードをPostmanに渡しても、私は何の応答も得られませんでした。
ありがとうございました!
を交換して、コールバック
を呼び出していないようです'return user 'が' data.Items.forEach() 'の内部でやり取りするのですか?その 'return'は' .forEach() 'コールバックからのみ返ります。外部関数自体からではありません。 – jfriend00
どこでも 'getUserByUsername'に渡されるコールバックを呼び出さないでください。 –
返り値をforEachの外側に移動しようとしましたが、何も変更されていませんでした:( – Nico