Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs passport.js中的身份验证,与angular js一起使用_Angularjs_Angularjs Scope_Angularjs Routing - Fatal编程技术网

Angularjs passport.js中的身份验证,与angular js一起使用

Angularjs passport.js中的身份验证,与angular js一起使用,angularjs,angularjs-scope,angularjs-routing,Angularjs,Angularjs Scope,Angularjs Routing,我通过下面的链接了解了passport.js中authenticate方法的用法 在我的项目中,我有以下代码: app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { console.log(err); return next(err) } if (!use

我通过下面的链接了解了passport.js中authenticate方法的用法

在我的项目中,我有以下代码:

app.post('/login', function(req, res, next) {
        passport.authenticate('local', function(err, user, info) {
            if (err) { console.log(err); return next(err) }
            if (!user) {
                return res.json(400, info);
            }
            req.logIn(user, function(err) {
                if (err) { return next(err); }
                return res.json(200, {user_id: user._id, url:"/user/home"});
            });
        })(req, res, next);
    });
我在另一个文件中调用了/login url,如下所示

 $http.post('/login', $scope.user).
              success(function(data, status, headers, config) {
                $window.location.href= data.url ? data.url : '/';
                $scope.view.loading = false;
              }).error(function(data, status, headers, config) {
                console.log(data);
                $scope.view.loading = false;
                $scope.view.submitted = true;
                $scope.view.serverError=data.message ? data.message : "Server Error!";
              });
我的疑问是,passport.authenticate为什么知道用户凭据。
在调用http.post时,我们还发送$scope.user。但这只是“数据”。为什么passport.authenticate知道对象“user”?

不能100%确定您的确切要求,但我会试一试

您负责告知Passport用户名/密码对是否匹配,然后向Passport提供与给定用户名(或电子邮件或其他内容)对应的用户对象。这是在:
passport.use(newlocalstrategy(…)指定此逻辑的位置。(您可以在官方网站上找到有关如何执行此操作的示例代码。)Passport然后在会话中序列化此用户对象,同样按照您指定的逻辑:

passport.serializeUser(function (user, done) {
    // Only store the user id in the session
    done(null, user.id);
});

passport.deserializeUser(function (id, done) {
    // Find the user with the given id
    User.find(id).done(function (err, user) {
        done(err, user);
    });
});
passport在调用函数中传递给您的
user
对象是
passport.authenticate
与您根据本地策略提供给passport的
user
对象完全相同

下面是事件的细目:

  • 您将用户名/密码(或电子邮件/密码)对发布到/login
  • 请求由Express接收并路由到相应的处理程序
  • 执行
    passport.authenticate(…)
    ,方法是向它提供处理程序提供的
    req
    res
    next
    对象
  • Passport执行您在
    Passport中指定的登录逻辑。使用(new LocalStrategy(…)
    。如果逻辑处理的结果是给它一个有效的
    user
    对象,则passport会将该对象传递给回调函数,以便您可以返回用户的详细信息(或其他信息)