Passport和Passport Local req.isAuthenticated始终返回false

Rob*_*Rob 6 access-token passport.js

我无法跟踪此情况,但对于我的设置,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;
};
Run Code Online (Sandbox Code Playgroud)

但是快速浏览一下,我看不到_userProperty本地策略中的任何地方(对不起,如果我看起来不够努力),所以我想这可能就是为什么它总是返回错误?

我留下了我的应用程序代码的代码示例,但我觉得可能更容易快速查看我正在进行的工作的repo: passport api token sessionless

最终,我的目标是让logout在该样板项目中正常工作(目前它没有).

小智 8

我想你忘记了:req.login(...)在里面passport.authenticate('local', function(...){}).

见这里(页面末尾)


Rob*_*Rob 2

如果我原来的问题一开始就没那么有用,我很抱歉,但是......

我发现我的护照、护照本地和护照本地猫鼬的组合,解决方案是简单地在我的猫鼬模式上创建一个失效方法(具有passportLocalMongoose“插入”功能,当我的/logout路线受到攻击时,我基本上会删除该用户的令牌。这是该方法:

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');
            }
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

我认为在上下文中看到这一点更有趣,所以请再次随意参考所列的存储库......希望这对某人有帮助。

另外,如果上述库之一的核心想要建议一种更好的方法,我当然很乐意重构我的代码以使其更惯用;如果没有,这种方法似乎有效。