gpt4 book ai didi

angularjs - Passport.js 路由不重定向

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:17 25 4
gpt4 key购买 nike

更新:为我的 successRedirect 使用不同的路径,我已经成功地获得了对我的 GET 请求的 200 响应(参见下面的代码)。不过,这只是我第一次踏上这条路线时的真实情况。即使这样,浏览器也不会更改呈现的页面。即在我成功注册一个虚拟用户后,没有实际的重定向。

在对代码 304 进行了更多研究并进行了一些播放之后,这似乎是一个缓存问题,但这就是我到目前为止所得到的。

获取/测试

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 文件正确地向数据库添加了一行并且似乎序列化了 session 。它将用户返回到我的路由器,该路由器尝试重定向浏览器。查看我的控制台请求,我看到这个不成功的请求: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);

最佳答案

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

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

在下面使用 Angular.js 之前。
注册.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);
};

我认为这不起作用的原因是浏览器不知道等待来自 Node 的响应。不是肯定的,但我最好的猜测是这个问题可以通过 Angular 中的 promise 来解决。

我通过将 angular 排除在等式之外并使用 html 表单处理 POST 来解决重定向问题。这是没有更改服务器端的工作代码:

注册.html

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

关于angularjs - Passport.js 路由不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com