护照和本地护照 req.isAuthenticated 总是返回 false

7

我一直无法追踪到这个问题,但对于我的设置,isAuthenticated 在成功登录后仍然返回 false。以下是护照代码:

req.isAuthenticated = function() {
  var property = 'user';
  if (this._passport && this._passport.instance._userProperty) {
    property = this._passport.instance._userProperty;
  }

  return (this[property]) ? true : false;
};
但是我快速查看了本地策略,没有在任何地方看到“_userProperty”属性(如果我没有仔细查看,对不起),所以我想这可能是为什么它总是返回false的原因? 我不会留下我的应用程序代码示例,但我认为快速查看我的进行中的工作的存储库可能更容易: passport api token sessionless 最终,我的目标是使该样板项目的注销功能正常工作(目前它不起作用)。
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
8
我猜您忘记将 req.login(...) 放在 passport.authenticate('local', function(...){}) 内部了。 请参考这里(页面底部)

给出的链接并没有提到调用login()。实际上,它说身份验证已经调用了它。“注意:passport.authenticate()中间件会自动调用req.login()。当用户注册时,可以调用req.login()来自动登录新注册的用户。” - Epirocks

2
抱歉,如果我的原始问题起初不是那么有用,但是... 我发现使用护照、passport-local和passport-local-mongoose的组合时,简单的解决方法是在mongoose Schema上创建一个无效化方法(该方法已经“插入”了passportLocalMongoose),当我的/logout路由被访问时,我基本上删除那个用户的token。以下是该方法:
Account.statics.invalidateUserToken = function(email, cb) {
    var self = this;
    this.findOne({email: email}, function(err, usr) {
        if(err || !usr) {
            console.log('err');
        }
        usr.token = null;
        usr.save(function(err, usr) {
            if (err) {
                cb(err, null);
            } else {
                cb(false, 'removed');
            }
        });
    });
};

我想在上下文中看到这更有趣,所以请随时参考问题列表中列出的存储库...希望这可以帮助某人。

此外,如果来自上述任何库的核心想建议更好的方法,我当然愿意重构我的代码使其成为惯用语; 如果没有,这种方法似乎能够工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,