gpt4 book ai didi

javascript - 使用 AngularJS $http 到 POST 时,PassportJS 重定向不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:34:04 24 4
gpt4 key购买 nike

我正在使用 passportJS 进行用户身份验证。这是在我的应用程序的路由中,用于验证登录信息。

app.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));

当我有这样的表单时,重定向有效:

<form action="/login" method="post">
...
</form>

但是当我将 Angular 的 ng-submit$http.post('/login') 方法一起使用时,重定向不会触发。登录确实有效,但重定向无效。

<form ng-submit="submitLogin(name,password)">
...
</form>

MainController.js

$scope.loginSubmit = function(n,p) {
$http.post('/login', {
email: n,
password: p
});
};

为什么 Angular 会阻止重定向工作?

最佳答案

我不确定为什么重定向不适用于 Angular,但我找到了解决问题的方法。

我们需要将内容发送回 Angular,然后使用 $location.path() 来处理重定向。

PassportJS如果简单的身份验证功能还不够,建议使用自定义回调。

app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
res.send({
message: 'no user'
});
}
req.login(user, function(err) {
if (err) {
return next(err);
}
res.send({
message: 'logged in'
});
});
})(req, res, next);
});

我们不使用 res.redirect(),而是简单地向 Angular 发送一条消息。

Controller

$http.post('/login', {
email: n,
password: p
})
.success(function(data) {
if (data.message === 'logged in') {
$location.path('/presents');
});

关于javascript - 使用 AngularJS $http 到 POST 时,PassportJS 重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338924/

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