使用请求和护照npm登录帐户

时间:2015-05-26 15:02:13

标签: node.js login request

我正在使用nodejs进行项目,现在我希望使用护照npm登录我的帐户,但不是从网页登录,从请求发布方法,是否可以完成?

这样的主要代码:

<div>
    <b>Far</b>
    <ul class="exam" alt="Foo Items">
        <li>Stuff</li>
        <li>Things</li>
    </ul>
    <b>Near</b>
    <ul class="exam" alt="Foo Items">
        <li>dunno</li>
    </ul>
</div>
<div>
    <b>Far</b>
    <ul class="exam" alt="Bar Items">
        <li>Foo</li>
    </ul>
    <b>Near</b>
    <ul>
        <li>bar</li>
        <li>eggs</li>
    </ul>
</div>

当我用get方法调用“check”并使用正确的用户名/密码时,我可以用“login”方法从数据库打印出用户数据,但是当它重定向主页时丢失了用户会话。有什么建议吗?< / p>

1 个答案:

答案 0 :(得分:1)

当用户获得/check时,它不会重定向用户,因为/login中对/check的POST请求本身会被重定向,而不是实际用户。同时向内部网页发出内部请求也不是登录的最佳解决方案。我建议像这样创建login() middleware

// Don't forget to set req.body.username and req.body.password when calling login().
var login = function login(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return next(); }

    req.logIn(user, function(err) {
        if (err) { return next(err); }

        return next(null);
    });
  })(req, res, next);
};

然后适当地调用它:

router.post('/login', login, function(req, res, next) {
  if (req.user) {
    console.log('We logged in successfully!');
    res.redirect('/');
  } else {
    res.json(null);
  }
});

router.get('/check', function(req, res, next) {
  if (!req.user) {
    login(req, res, function(err) {
      if (err) {
        return next(err);
      }

      if (!req.user) {
        // No user, do some error handling.
      } else {
        // We have the user, do some custom stuff...
      }

      res.redirect('/');
    });
  } else {
    // User is logged in already, do some other custom stuff...
  }
});

您可以通过检查req.user是否存在来检查用户是否已登录。