2014-11-20 54 views
1

目前,我正在使用JWT(json Web令牌)来验证某人是否已登录的Angularjs网站上工作。现在我想使用passport/oauth添加一些“一键式”登录方法,但在如何将登录详细信息传回到angularjs方面很困难。在JWT中使用护照oauth在angularjs中使用

当我与电子邮件/密码登录,我生成令牌,并将其传递回角:

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 
    }); 
}); 

回答

0

所以我有几个问题。我没有正确使用护照(我忘记添加序列化/反序列化)。然后在我的auth回调中,我设置了一个包含JWT的cookie(我也没有意识到护照也会自动设置req.user),并以角度检查cookie。如果Cookie存在,我将其设置为本地存储,并删除Cookie。奇迹般有效!