代码之家  ›  专栏  ›  技术社区  ›  Rob

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

  •  7
  • Rob  · 技术社区  · 11 年前

    我还没能追踪到这一点,但为了我的设置, 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 在本地策略中的任何地方都不可靠(抱歉,如果我不够仔细的话),所以我想这可能就是为什么它总是返回错误的原因?

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

    最终,我的目标是让注销在样板项目中正常工作(目前还没有)。

    2 回复  |  直到 10 年前
        1
  •  8
  •   inspector-g    11 年前

    我猜你忘了放: req.login(...) 在…内 passport.authenticate('local', function(...){}) .

    See here (at the end of the page)

        2
  •  2
  •   Rob    11 年前

    如果我最初的问题一开始没有那么有用,我深表歉意,但是。。。

    我发现我的护照、护照本地和护照本地猫鼬的组合,一个解决方案是简单地在我的猫鼬模式上创建一个无效方法(它具有 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');
                }
            });
        });
    };
    

    我认为,在上下文中看到这一点更有趣,因此请再次参考所列回购协议。。。希望这对某人有所帮助。

    此外,如果上述库中的一个核心想要提出更好的方法,我当然愿意重构我的代码,使其更地道;如果不是,这种方法似乎奏效了。