【问题标题】:I cant pass token in node js我无法在节点 js 中传递令牌
【发布时间】:2021-08-17 14:29:23
【问题描述】:

我在 NodeJS 中遇到了重定向系统的问题。我在登录时创建了登录站点。当我检查登录名和密码是否正确时,我制作了 jwt 令牌。然后我想将它传递到另一个页面并通过 get 方法重定向(“/users/token”)到我的用户页面。我搜索了很多网站,但我无法解决这个问题。非常感谢 我的代码是:

    const token = req.params.token;
    console.log("===========================");
    const body = req.body;
    const userId = req.userData.userId;

    User.findOneAndUpdate({_id: userId}, {
        $set: {
            fullname: req.body.fullname,
            university: req.body.university,
            dateofbirth: req.body.dateofbirth,
            studentid: req.body.studentid,
            course: req.body.course,
            // awardeddegree: req.body.awardeddegree,
            // degree: req.body.degree,
            verified: true,
        },

    });
    // .exec()
    // .then(result => {
    // return res.render('forms/verified', {
    //     pageTitle: 'Verification Application',
    //     path: 'form/verified',
    //     formsCSS: true,
    //     productCSS: true,
    //     token:token,

   return res.redirect("/users/token")

}));


router.post('/signup', (req, res, next) => {
    const username = req.body.username.trim();
    const password = req.body.password.trim();
    console.log("sign up Ok!!!!");
    User.find({
        username: username,

    })
        .exec()
        .then(user => {
            if (user.length >= 1) {
                return res.status(errors.USERNAME_UNAVAILABLE.status).json(errors.USERNAME_UNAVAILABLE);
            } else {
                bcrypt.hash(password, 10, (err, hash) => {
                    if (err) {
                        console.log(err)
                        res.status(generalError.status).json(generalError);

                    } else {
                        const user = new User({
                            username: username,
                            password: hash,
                            // fullname:req.body.fullname,
                            // university:req.body.university,
                            // dateofbirth:req.body.dateofbirth,
                            // studentid:req.body.studentid || null,
                            // course:req.body.course,
                            // awardeddegree:req.body.awardeddegree|| null,
                            // degree:req.body.degree|| null


                        });
                        user
                            .save()
                            .then(result => {
                                res.render('forms/login', {
                                    pageTitle: 'Login application',
                                    path: '/forms/login',
                                    formsCSS: true,
                                    productCSS: true,

                                });
                                // res.status(201).json({
                                //     message: "Ο χρήστης δημιουργήθηκε επιτυχώς."
                                //
                                // });
                            })
                            .catch(err => {
                                console.log(err);
                                res.status(generalError.status).json(generalError);

                            });
                    }
                })
            }
        })
        .catch(err => {
            console.log(err);
            res.status(generalError.status).json(generalError);

        });

});


////////////////////////
// user login //////////
////////////////////////
router.post('/login', (req, res, next) => {
    const username = req.body.username.trim();
    const password = req.body.password.trim();
    User.findOne({
        username: username
    })
        .then(user => {
            if (!user) {

                return res.status(errors.USERNAME_CONFIRMATION.status).json(errors.USERNAME_CONFIRMATION);
            }
            //  let fetchedUser = user;
            bcrypt.compare(password, user.password, (err, result) => {
                if (err) {
                    return res.status(authError.status).json(authError);

                }
                if (result) {
                    console.log(user)
                    const token = jwt.sign({
                            username: user.username,
                            userId: user._id,

                        },
                        config.secret
                    );
                    if (user.verified) {
                        if (user.token) {
                            console.log("here")
                            return res.render('forms/main', {
                                pageTitle: 'Verification Form',
                                path: 'form/verified',
                                formsCSS: true,
                                productCSS: true,
                                token: token
                            });
                        }
                        console.log("here2")

                        return res.render('forms/unverified', {
                            pageTitle: 'Main Application',
                            path: 'form/unverified',
                            formsCSS: true,
                            productCSS: true,
                            token: token

                        });

                    }
                    console.log("here 3")

                    return res.render('forms/main', {
                        pageTitle: 'Verification Form',
                        path: '/forms/main',
                        formsCSS: true,
                        productCSS: true,
                        token: token,
                        verify: true


                    });

                    // return res.status(200).json({
                    //     message: "Συνδεθήκατε με επιτυχία",
                    //     username: user.username,
                    //     status: 200,
                    //     success: true,
                    //     token:token,
                    // });
                }
                res.status(authError.status).json(authError);

            });
        })
        .catch(err => {
            console.log(err);
            res.status(generalError.status).json(generalError);

        });

});

////////////////////////
// Get all non admin ///
////////////////////////
router.get('/login', asyncHandler(async (req, res, next) => {


    return res.render('forms/login', {
        pageTitle: 'Login Form',
        path: '/forms/login',
        formsCSS: true,
        productCSS: true,

    });
}));

router.get('/registration', asyncHandler(async (req, res, next) => {

    return res.render('forms/registration', {
        pageTitle: 'Registration Form',
        path: 'form/registration',
        formsCSS: true,
        productCSS: true,

    });


}));
router.post('/main', asyncHandler(async (req, res, next) => {

    console.log("main")
    return res.render('forms/main', {
        pageTitle: 'Main Application',
        path: 'form/main',
        formsCSS: true,
        productCSS: true,

    });


}));
router.get('/verify', asyncHandler(async (req, res, next) => {

    return res.render('forms/verified', {
        pageTitle: 'Verified Application',
        path: 'form/verified',
        formsCSS: true,
        productCSS: true,


    });
}));
router.get('/unverified', asyncHandler(async (req, res, next) => {

    return res.render('forms/unverified', {
        pageTitle: 'unverified Application',
        path: 'form/unverified',
        formsCSS: true,
        productCSS: true,

    });
}));


router.get('/token',verify, asyncHandler(async (req, res, next) => {
    const _id = req.params._id
    const token = req.params.token;
    let user = await User.findById(_id).exec();


    res.render('forms/token',
        {
            _id: _id,
            // verified: true,
            token: token

        }

    )

    // return res.render('forms/token', {
    //     pageTitle: 'Token Application',
    //     path: 'form/token',
    //     formsCSS: true,
    //     productCSS: true,
    // });
    //res.send({message:"works"})
}));


module.exports = router;``` 

【问题讨论】:

    标签: node.js redirect authorization token ejs


    【解决方案1】:

    所以我看到一些不加起来的东西,返回 res 对象,如果 req,你不必使用它, res 对象已经在方法中,因为它被传递到这里,它恢复到 req 它附带,也在,如果条件我看不到其他语句 太多的 res 对象也会导致错误, 另外,我在get和post方法中看到了两条登录路由,我希望它们在单独的子路由中,即使它们有两种不同的方法,它们也不能在同一路由或子路由中。希望这可以消除疑虑,关于将令牌传递给用户页面,我建议将其呈现并将其作为变量传递,或者如果您必须在“get”路由上传递它,您可以将其作为查询添加到 URL 并阅读用户路由上的查询,但不建议这样做,因为它会造成令牌暴露的漏洞。 例如。 res.redirect("/users/token?token=") //作为查询

    或者你可以使用参数来 例如。 res.redirect("/users/token/") //作为查询 并将其读取为 route.get("user/token/:token",(req,res)=>{}

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2021-06-19
      • 2018-11-02
      • 1970-01-01
      • 2015-05-13
      • 2022-08-04
      相关资源
      最近更新 更多