在JWT的angularjs中使用passport oauth

时间:2014-11-20 19:01:56

标签: angularjs node.js oauth passport.js

目前,我正在使用一个Angularjs网站,该网站使用JWT(json web令牌)来验证是否有人登录。现在我想使用passport / oauth添加一些“一键式”登录方法,但发现如何将登录详细信息传递回angularjs很困难。

当我使用电子邮件/密码登录时,我会生成一个令牌,并将其传递给angular:

var token = jwt.sign({ _id: user._id.toString() }, JWT_SECRET);
return res.json({
  userID: user._id.toString(),
  username: user.username,
  isAdmin: user.isAdmin,
  token: token
});

令牌用于验证登录。通过oauth时,你必须离开网站,然后回来,所以我不能以同样的方式从ajax返回一些令牌。

我认为可以将它添加到我的验证调用中(当有人刷新网站时,我会检查他们是否已经登录)。这将检查令牌并返回正确的用户数据。有没有办法检查护照是否已经在这里登录?我的验证码看起来像这样(JWT自动将令牌信息设置为req.user):

Schemas.User.findOne({ _id: req.user._id }, function (err, user) {
  if (err || !user) { return res.send(401); }
  return res.json({
    userID: user._id.toString(),
    username: user.username,
    isAdmin: user.isAdmin
  });
});

1 个答案:

答案 0 :(得分:0)

所以我有几个问题。我没有正确使用护照(我忘记添加序列化/反序列化)。然后在我的auth回调中,我设置了一个带有JWT的cookie(我也没有意识到护照也自动设置了req.user),并检查了角度的cookie。如果cookie存在,我将其设置为本地存储,并删除co​​okie。像魅力一样工作!