登录nodejs后显示个人资料信息

时间:2019-01-08 07:52:54

标签: node.js routes

我是 Node.JS API创建的新手。我已经成功实现了使用 JWT 令牌的登录,并且我已经创建了一个文件来验证并通过 token 在标头中。

这是我的登录路线:-

SELECT t2.*
FROM (SELECT startswith FROM test1 ORDER BY RAND() LIMIT 1) t1
JOIN test2 t2 ON t2.text LIKE CONCAT(t1.startswith, '%')

为此,我在登录时创建了一个JSON响应:-

startswith

现在,我还创建了一个文件来检查用户的身份验证。 check-auth.js

router.post('/login' , (req, res, next) => {

    User.find({email: req.body.email})
    .exec()
    .then(user => {
        if(user.length < 1) {
            return res.status(401).json({
                message: "Auth failed. User not found."
            })
        }
        bcrypt.compare(req.body.password, user[0].password, (err, result) =>{
            if (err) {
                return res.status(401).json({
                message: "Auth failed. Check email and password"
                });             
            }   
            if (result){
                const adminEmail = "tom@xyz.com";                                               
                const role = user[0].email===adminEmail? "admin" : "user";                                  
                const token = jwt.sign( 
                    {
                        email: user[0].email,
                        userId: user[0]._id,
                        role
                    },
                    process.env.JWT_KEY,
                    {
                        expiresIn : "1h"
                    });
                    return res.status(200).json({
                    message: "Auth Successful",
                    token : token
                    });
            }
        });
    })
    .catch(err =>{
        if (err.code == 500)
                    res.status(500).send(["Something went wrong in login"]);
            else
            return next(err);
    });
});

我需要用户登录,并且只能看到他们在注册过程中提供的详细信息。

注册路径:-

{
    "message": "Auth Successful",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRvbUB4eXouY29tIiwidXNlcklkIjoiNWMzMzI0MTgyNTg4M2I0Yzc0ODNkOGJjIiwicm9sZSI6InVzZXIiLCJpYXQiOjE1NDY5MzMwODYsImV4cCI60.zfRUQmg5K_mBU0Dkq72c0sgzFtCXvu8kObyvEflhg"
}

用户控制器:-

const jwt = require('jsonwebtoken');
module.exports = (req, rest, next) =>{ 
    try{
        const token = req.headers.authorization.split(" ")[1];
        console.log(token);
        const decoded = jwt.verify(token, process.env.JWT_KEY)
        req.userData = decoded;
        next();
    }
    catch(error){
        return res.status(401).json({
            message: "Auth failed"
        });
    }
};

个人资料路径中,我需要在成功登录后显示注册详细信息:-

router.post('/register' , ctrlUser.register);

我在这里停留了一段时间。

1 个答案:

答案 0 :(得分:1)

您可能希望获取登录的用户信息。

尝试以下代码

router.get('/profile', checkAuth, (req, res) =>{
    //something to do.
    // printing the user data
    console.log(req.userData);

    // sending the user data
    res.send(req.userData)
});

在您的check-auth中间件中,您已经放置了用户数据

req.userData = decoded;

因此您的userData应该在路线上可用。

并且由于您使用用户mailid来使jwt token陷入犯罪, 它们将在userData对象中可用。