Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
Javascript 使用AngularJS和PassportJS设置身份验证会话信息_Javascript_Angularjs_Node.js_Express_Passport.js - Fatal编程技术网

Javascript 使用AngularJS和PassportJS设置身份验证会话信息

Javascript 使用AngularJS和PassportJS设置身份验证会话信息,javascript,angularjs,node.js,express,passport.js,Javascript,Angularjs,Node.js,Express,Passport.js,我正在尝试设置一个内容管理系统,在客户端使用,在服务器端使用进行身份验证 目前我在客户端有两种服务方法:一种用于登录,另一种需要身份验证才能访问(不相关部分省略): client.js(客户端) 在服务器端,我尝试在passportJS站点上设置passport身份验证。(目前,身份验证凭据是硬编码的): app.js(服务器端) 当我启动服务器并运行客户端代码时。我从authenticate端点得到响应,说我已经“成功地进行了身份验证”。但是,当我单击页面上的按钮向“/games/”发出pos

我正在尝试设置一个内容管理系统,在客户端使用,在服务器端使用进行身份验证

目前我在客户端有两种服务方法:一种用于登录,另一种需要身份验证才能访问(不相关部分省略):

client.js(客户端) 在服务器端,我尝试在passportJS站点上设置passport身份验证。(目前,身份验证凭据是硬编码的):

app.js(服务器端) 当我启动服务器并运行客户端代码时。我从authenticate端点得到响应,说我已经“成功地进行了身份验证”。但是,当我单击页面上的按钮向“/games/”发出post请求时,服务器代码运行“isLoggedIn”函数,并报告req.isAuthenticated()为false


我错过了什么?通过阅读文档,我觉得我不太明白会话应该如何与angular一起工作,也许我错过了一些关键的设置步骤。

我检查了服务器端js的代码,它可以工作,所以问题可能出在angular代码中。您可以尝试根据以下指南制作http拦截器:@vanadium23谢谢您提供的链接,我会查看它。然而,我更感兴趣的是我的主要问题,就是让我的服务器设置一个有效的会话并验证它是否经过身份验证。一旦我理解并使会话正常工作,那么我将尝试实现重定向、拦截器等。您提到客户端代码可能有问题?有什么想法可能遗漏了什么/出了什么问题吗?@Craigines你有没有回避过你的问题?如果是的话,请把你的答案贴在这里,我想知道你是如何解决的。
app.controller('MainCtrl', function($rootScope, $scope, authenticator, gameService){
    authenticator.signIn({username: 'admin', password: 'lynda'})
    .success(function(data){
        $rootScope.session = data; //not sure if this is needed
        console.log(data);
    });
    $scope.post = function(){
        gameService.createNewGame({"name": "Brand new game",
                   "description": "new",
                   "image": "image.png"})
        .success(function(data){
        console.log(data);
        });
    };
});

app.factory('authenticator', function($http, $cookies){
    var signIn = function(userData){
      if(userData){
        return $http.post("/authenticate", userData);
      }
    };

    return {
        signIn: signIn,
    };
});

app.factory('gameService', function($http){
    return {
    createNewGame: function(newGame){
        return $http.post('/games', {data: newGame});
    }
});
var express = require('express');
var app = express();
var path = require('path');
var ObjectId = require('mongodb').ObjectID;
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var db = require('mongoskin').db('mongodb://administrator:thePassword@localhost:27017/website');

//allow parsing of body messages
app.use(bodyParser.json()); // application/json
app.use(cookieParser());
app.use(bodyParser.urlencoded({extended: true})); // application/x-www-form-urlencoded
app.use(session({secret: 'Super top secret',
         resave: true,
         saveUninitialized: true}
           ));
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done){
    done(null, user.username);
});

passport.deserializeUser(function(name, done){
    done(null, {username: name});
});

passport.use(new LocalStrategy(
    function(username, password, done){
    if(username === 'admin' && password === 'lynda'){
        return done(null, {username: 'admin'});
    }

    return done(null, false);
    }
));

function isLoggedIn(req, res, next) {
    console.log(req.isAuthenticated());
    next();
}

app.post('/authenticate', passport.authenticate('local'),
     function(req,res){
         res.send("Authenticated successfully");
     });

app.post('/games', isLoggedIn,
     function(req,res){
         console.log("You made it into the post");
         db.collection('games').insert({
         "name": req.body.name,
         "description": req.body.description,
         "image": req.body.image
         },function(err,result){
         if(err) throw err;
         res.send(result);
         });
     });

app.use(express.static("public"));
app.use(function(req,res,next){
    res.status(404).send("Sorry, can't find that!");
});

var server = app.listen(80, function(){
    var host = server.address().address;
    var port = server.address().port;

    console.log("App listening at http://%s:%s", host, port);
});