javascript - 成功登录后将用户数据从Nodejs服务器推送到Angular

标签 javascript angularjs node.js express passport.js

我尝试使用 PassportJS 通过 Facebook 登录我的用户,并将用户数据传递给 Angular。 在服务器端,用户 Controller 中的 Facebook 回调代码看起来一切正常:

exports.facebookCallback = function() {
return function(req, res, next) {
    passport.authenticate('facebook', function(err, user, email) {
        if (err || !user) {
            return res.redirect('/auth');
        }
        req.login(user, function(err) {
            if (err) {
                return res.redirect('/auth');
            }
            return res.redirect('/');
        });
    })(req, res, next);
 };
};

据我从 PassportJS 文档中了解到,调用 req.login 应该将用户数据放入 session 中。

我在服务器端的路由如下:

app.get('/auth', usersCtrl.auth);
app.get('/auth/signout', usersCtrl.logout);
app.get('/auth/facebook', passport.authenticate('facebook', {
    scope: ['email', 'user_hometown']
}));
app.get('/auth/facebook/callback', usersCtrl.facebookCallback());

express 和 Passport 配置包括:

app.use(express.cookieParser());
app.use(express.session({secret: '1234567890QWERTY'}));
app.use(express.bodyParser());
app.use(passport.initialize());
app.use(passport.session());

现在在 Angular 方面,我尝试从这样定义的服务中的 session 中获取用户数据:

module.exports = require('angular')
.module('HomeModule', [])
.controller('HomeCtrl', function ($scope) {
       //home controller code ors here
}).controller('NavbarCtrl', ['$scope', 'Authentication', function ($scope, Authentication) {
    $scope.authentication = Authentication;
    //rest of the navbar controller goes here
}]).factory('Authentication', [
    function() {
        var _this = this;

        _this._data = {
            user: window.user
        };

        return _this._data;

    }
]);

不幸的是,用户数据在 window.user 中不可用。 知道我在这里做错了什么吗?

最佳答案

正如 Girish 所说,passport session 对象在客户端不可用。正如您似乎在使用 express,一个简单的方法是使用 express-expose .

如果你想让用户数据在用户通过身份验证时在所有页面上都可用,你可以在你的路由声明之前添加这样的东西

app.use(function (req, res, next) {
    if (req.isAuthenticated()) res.expose(req.user, 'user');
    next ();
});

用户数据将作为 window.user 在客户端可用。

关于javascript - 成功登录后将用户数据从Nodejs服务器推送到Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341617/

相关文章:

javascript - `server.listen()`如何保持node程序运行

javascript - HTML - 从远程在线 CSV 文件访问数据

angularjs - 如何在 Angular JS 中使用 $q 返回值?

javascript - 在 Metronic AngularJS 主题中设置页面加载时选中的复选框

javascript - 序列化多对多查询问题

JavaScript:检测窗口开始改变位置的时刻

javascript - 对象内函数中的 this 关键字

javascript - AngularJS - 带有 "key.key.key..value"的动态 ngModel

multithreading - 如果 nodejs 是多线程的,为什么我应该使用集群模块来利用多核 cpu?

node.js - Mongoose 嵌套模式验证不起作用