首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scope access passport-jwt

Scope access passport-jwt
EN

Stack Overflow用户
提问于 2019-02-28 04:55:05
回答 2查看 296关注 0票数 0

有人能给我详细解释一下为什么/profile的路由可以访问user对象吗?我目前正在学习JavaScript和NodeJS,你们的答案将对我的学习有很大的帮助谢谢你们。

代码语言:javascript
复制
app.post('/login',function (req, res) {
        let email = req.body.email;
        let password = req.body.password;
        User.getUserByEmail(email, (err, user) => {
            if (err) throw err;
            if (!user) {
                return res.json({
                    success: false,
                    message: "User not found!"
                });
            }
            User.comparePassword(password, user.password, (err, isMatch) => {
                if (err) throw err;
                if (isMatch) {
                    var token = jwt.sign(user.toJSON(), config.JWT_SECRET, {
                        expiresIn: '15m'
                    });
                    res.json({
                        success: true,
                        token: token,
                        user: {
                            id: user._id,
                            email: user.email
                        }
                    });
                } else {
                    return res.json({
                        success: false,
                        message: "Password incorrect!"
                    });
                }
            })
        });
    });

    app.get('/profile', passport.authenticate('jwt', {
        session: false
    }), (req, res) => {
        res.json({user: req.user});
    });
EN

回答 2

Stack Overflow用户

发布于 2019-02-28 05:16:40

这是因为您的passport.authenticate()调用将user填充到req

来自passports.org的

代码语言:javascript
复制
app.post('/login',
  passport.authenticate('local'),
  function(req, res) {
    // If this function gets called, authentication was successful.
    // `req.user` contains the authenticated user.
    res.redirect('/users/' + req.user.username);
  });

除了您的路径和身份验证方法不同之外,您的路由是相同的。

有关详细信息,请参阅文档:http://www.passportjs.org/docs/authenticate/

票数 0
EN

Stack Overflow用户

发布于 2019-02-28 05:16:55

一些背景知识

  • app.get函数接受一个url一个或多个回调函数,并以(req, res, next) => {}作为其签名
  • ,这些回调函数被一个接一个地执行。在这些回调中的任何一个中,您都可以修改req 对象,它将“传播”到下一个回调
  • 要从一个回调切换到下一个回调,您可以调用next

在你的情况下

对response.

  • That的调用
  • 会返回一个回调,这个回调是在你发送passport.authenticate('jwt', {sessions: false})回调来验证用户身份之前执行的,然后将它的值“注入”到req对象中。
  • 正如我前面提到的,这个req将“传播”到下一个回调。这就是为什么当您发送json响应时,它req已经包含了user key
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54914320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档