2014-02-23 61 views
6

我还没有能够跟踪到这一点,但对于我的设置,即使成功登录后,isAuthenticated始终返回false。这里的护照代码:护照和护照本地req.isAuthenticated总是返回假

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

道歉,如果我原来的问题不是摆在首位的是有用的,但是......

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

我相信它更有趣的,看看这在上下文中再次请随意参考上市问题的回购...希望这个他lps某人。另外,如果前面提到的库中的一个核心想要提出更好的方法,我当然会喜欢重构我的代码以使其更具地道性;如果不是,这种方法似乎工作。

8

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

See here (at the end of the page)

+0

完美!谢谢:) – Sohail

+0

给出的链接没有提到关于调用login()的内容。 “注意:passport.authenticate()中间件自动调用req.login()函数,该函数主要用于用户注册时,在此期间可以调用req.login()来自动登录新注册的用户“。 – Epirocks