【问题标题】:Get user ID from google authentication in express (passport.js)在 express (passport.js) 中从 google 身份验证中获取用户 ID
【发布时间】:2018-02-20 01:36:02
【问题描述】:

我试图在用户登录后获取 user.id,但我无法弄清楚。

当我在 Postman (../api/users/829ug309hf032j) 中执行硬 GET 请求时,我得到了该用户,但我不知道如何在 GET 请求之前获取要设置的 ID。

app.component.ts

const id = // id I need of logged-in user //;

this.http.get('http://localhost:3000/api/users/' + id).subscribe(data => {
  console.log(data)
});

server.js

app.get('/api/users/:id', (req, res) => {
    User.findById(req.params.id, (err, users) => {
        res.send(users)
    })
})

app.get('/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/ask' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/answer');
  });

我想向用户显示他们的姓名,并且仅在他们登录时才显示...

<p *ngIf="user">{{ user.name }}</p>

【问题讨论】:

    标签: angular express passport.js backend


    【解决方案1】:

    如果身份验证成功,Passport 会使用req.user 填充req 对象,因此只需使用以下变体:

    app.get('/api/users/me', (req, res) => {
      if (req.user) {
        res.json(req.user);
      } else {
        res.sendStatus(204);
      }
    });
    

    【讨论】:

    • 返回空值。我意识到我可以将用户保存为局部变量(currentUser)并使用您推荐的路由(api/users/me)将其传递给前端。当我执行 GET 请求时,它会返回当前用户。谢谢。
    • 如果您有多个用户同时使用系统,这种方法是否有效,或者不会覆盖该局部变量?
    • 您的 express 配置中有 app.use(passport.session()); 吗?
    • 我不确定它是否能正常工作。我将不得不做一些其他的测试。是的,passport.session 就在里面。
    猜你喜欢
    • 2016-02-02
    • 2022-01-18
    • 1970-01-01
    • 2018-10-21
    • 2022-01-02
    • 2014-10-25
    • 2017-05-19
    • 2013-11-02
    • 2019-03-13
    相关资源
    最近更新 更多