Angular2中的Passport JS会话数据

时间:2017-01-16 18:25:07

标签: javascript angular authentication passport.js

从后端到前端发送护照会话信息的最佳方法是什么?

我的应用程序适用于端口3000.前两个获取用于Facebook登录和重定向。下一步是从数据库中获取用户数据(用户ID应存储在req.user

routes.js:

app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

app.get('/auth/facebook/callback',
        passport.authenticate('facebook', {
            successRedirect : 'http://localhost:8000/',
            failureRedirect : '/fail'
        })
);

app.get('/auth/userdata', isLoggedIn, function(req, res) {
    Donator.findById(req.user, function(err, fulluser) {
        if (err) throw err;
        res.json(fulluser);
    })
});

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
        next();
    } else {
        res.json(false);
    }
};

passport config.js

'facebookAuth' : {
        'clientID'      : 'secret',
        'clientSecret'  : 'secret',
        'callbackURL'   : 'http://localhost:3000/auth/facebook/callback'
    },

因此,在我的Angular2应用程序中,我可以转到http://localhost:3000/auth/facebook,重定向到FB登录页面,如果成功重定向到http://localhost:3000/auth/login/callback,则会将我带到http://localhost:8000/

在我的适用于端口8000的Angular2应用程序

getUser(){
    this.http.get('http://localhost:3000/auth/userdata')
    .map(res => return res.json())
}

每次调用getUser()时,都会返回' false'。是否有一种简单而安全的方式来注射"这个会话数据到我不同端口的前端?此外,当我在浏览器中转到http://localhost:3000/auth/userdata时,我可以看到此配置文件呈现为JSON。

当我在同一个端口设置后端和前端时它工作,F​​acebook,Twitter,谷歌,本地,一切都很好,getUser返回完整的用户档案。

我希望它清楚。

1 个答案:

答案 0 :(得分:5)

Angular2中的请求存在问题。我已为每个请求添加了凭据:

getUser(){
    this.http.get('http://localhost:3000/auth/userdata', {withCredentials: true})
    .map(res => return res.json())
}

现在很好。