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

标签 javascript angularjs redirect passport.js

我正在使用 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/

相关文章:

json - 数据绑定(bind) Controller 服务 : works for objects but not for numbers

apache - HAProxy - 将一个域的流量重定向到 https,其他域仅重定向到 http

php - 使用 Curl PHP 获取最终重定向

javascript - Angularjs 动态范围不起作用

.htaccess 301 重定向活跃 - 然而 Google Analytics(实时)显示旧网站上有许多活跃访问者

javascript - 从一开始就删除一个字符哈希/井号

javascript - 如何使用fabric js创建html表格结构?

javascript - 从内容页面 TextBox 的 MasterPage 设置焦点

javascript - onclick 内部函数失败

javascript - 从 api 加载的路由 - Controller 从未调用过