【问题标题】:Passport and Passport Local req.isAuthenticated always returns falsePassport 和 Passport Local req.isAuthenticated 总是返回 false
【发布时间】:2014-03-24 16:00:09
【问题描述】:

我无法追踪到这一点,但是对于我的设置,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 的原因?

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

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

【问题讨论】:

    标签: access-token passport.js


    【解决方案1】:

    我猜你忘了把:req.login(...) 放在 passport.authenticate('local', function(...){}) 里面。

    See here (at the end of the page)

    【讨论】:

    • 给出的链接没有说明调用 login()。其实它说Authenticate已经调用了。”注:passport.authenticate()中间件会自动调用req.login(),这个函数主要是在用户注册时使用,期间可以调用req.login()自动登录新注册的用户。”
    【解决方案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');
                }
            });
        });
    };
    

    我认为在上下文中看到这一点会更有趣,所以再次请随时参考有问题的 repo...希望这对某人有所帮助。

    另外,如果来自上述库之一的核心想要提出更好的方法,我当然愿意重构我的代码以使其符合习惯;如果没有,这种方法似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 2021-04-03
      • 2021-01-28
      • 2021-03-09
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多