Passport.js路由不重定向

时间:2014-10-14 22:55:21

标签: angularjs node.js express passport.js

更新:为我的successRedirect使用不同的路径我设法获得了对我的GET请求的200响应(请参阅下面的代码)。不过,这只是我第一次上路的时间。即便如此,浏览器也不会更改呈现的页面。即在我成功注册虚拟用户后,没有实际的重定向。

经过一些关于代码304的更多研究以及一些播放它似乎是一个缓存问题,但就我迄今为止所做的那样。

GET / test

app.get('/test', function(req, res) {
        res.render('video-view.html');
    });

    // process the signup form
    app.post('/signup', passport.authenticate('local-signup', {
        successRedirect : '/test', // redirect to the secure profile section
        failureRedirect : '/sign-up', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));

在成功进行本地注册后,我的路由器在正确重定向方面遇到了很多麻烦。我的/config/passport.js文件正确地向数据库添加了一行,并显示为序列化会话。它将用户返回到我的路由器,该路由器尝试重定向浏览器。查看我的控制台请求,我看到这个不成功的请求:GET / home 304。

我已经在这方面工作了很长一段时间,并且无法找到解决方案或解决问题。我的部分问题是我没有使用模板引擎 - 只提供用angular.js编写脚本的html。也许我还没有正确配置,但所有其他路由和功能都运行良好。有什么想法吗?

这是我的路由器代码:

var express = require('express');

module.exports = function(app, passport) {

    app.get('/signup', function(req, res) {
        // render the page and pass in any flash data if it exists
        res.render('sign-up.html');
    });

    app.get('/home', function(req, res) {
        res.render('video-view.html');
    });

    app.post('/signup', passport.authenticate('local-signup', {
        successRedirect : '/home', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));

};

我的服务器设置如下:

var express  = require('express');
var app      = express();
var port     = process.env.PORT || 8080;
var passport = require('passport');
var flash    = require('connect-flash');

require('./config/passport')(passport); // pass passport for configuration

app.configure(function() {
    app.use(express.logger('dev')); // log every request to the console
    app.use(express.cookieParser()); // read cookies (needed for auth)
    app.use(express.bodyParser()); // get information from html forms
    app.engine('html', require('ejs').renderFile);
    app.use('/', express.static(__dirname + '/views'));

    app.use(express.session({ secret: 'vidyapathaisalwaysrunning' } )); // session secret
    app.use(passport.initialize());
    app.use(passport.session()); // persistent login sessions
    app.use(flash()); // use connect-flash for flash messages stored in session
});

require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

app.listen(port);

2 个答案:

答案 0 :(得分:4)

已解决:令人惊讶的是,问题是由视图中的代码引起的。

这是我之前和之后的技术:

在使用下面的Angular.js之前 登入up.html

<div class="col-xs-6" id="register">
    <p> Enter Username </p>
    <input type="text" ng-model="username"/>
    <p> Enter Password </p>
    <input type="text" ng-model="password"/>
    <input type="button" ng-click="register()">
</div>

controller.js

$scope.register = function(){
    var send = {'username': $scope.username,
                'password': $scope.password};
    $http.post('/signup', send);
};

我认为这不起作用的原因是浏览器不知道等待节点的响应。不是积极的,但我最好的猜测是,这个问题可以通过Angular中的承诺来解决。

我解决了重定向问题,将角度排除在等式之外,并使用html中的表单处理POST。这是工作代码,不改变服务器端:

登录up.html

 <form action="/signup" method="post"> 
     <input type="text" name="username" />
     <input type="text" name="password" />
     <button type="submit" id="enter" value="ENTER" />
 </form>

答案 1 :(得分:0)

我认为回家304不一定是错误的。它告诉你它正在获取页面,但我相信它没有改变。我认为这个问题就是你送回来的。我不熟悉ejs的工作原理,但你只是想渲染一个html页面吗?然后你应该使用sendFile我相信,而不是渲染。

15 Oct 01:25:24 - [nodemon] starting `node ./bin/www`
GET / 200 826.199 ms - 11667
GET /js/lib/bootstrap.min.js 304 3.557 ms - -
GET /js/lib/metisMenu.min.js 304 2.810 ms - -
GET /js/lib/morris.min.js 304 0.607 ms - -
GET /js/lib/raphael.min.js 304 1.195 ms - -
GET /js/lib/sb-admin-2.js 304 0.522 ms - -
GET /js/lib/angular/angular-bootstrap.min.js 304 1.334 ms - -
GET /js/app/app.js 304 2.389 ms - -
GET / 200 366.541 ms - 11667
GET /css/bootstrap/bootstrap.min.css 304 1.078 ms - -
GET /css/mm/metisMenu.min.css 304 1.264 ms - -
GET /css/sb-admin-2.css 304 0.955 ms - -
GET /css/morris.css 304 0.739 ms - -
GET /css/font-awesome.min.css 304 1.277 ms - -
....

这显示它正在使路线正常。 /。都很好。 / route现在说在渲染html(它只是驻留在/)时获取所有这些js文件。这些都是304因为它们永远不会改变。您发送文件的方式可能有误。