Passport身份validation在sails.js应用程序中不起作用

我有一个Sails JS应用程序。 我正在尝试使用Passport.js身份validation层sails-generate-auth来设置身份validation 。 我已经按照他们的文档中给出的步骤configuration了我的应用程序。

但是,当我解除我的风帆应用程序,身份validation不起作用。 我能够访问控制器,即使我没有login(这不是redirect到我的login页面)。

我在api/policies/passport.js添加了一个console.log语句,如下所示:

 module.exports = function (req, res, next) { passport.initialize()(req, res, function () { passport.session()(req, res, function () { res.locals.user = req.user; console.log(req.user); // added by me next(); }); }); }; 

现在,当我在login之前或登出之后访问控制器时,其打印undefined 。 但是,当我login时,它打印我的用户数据。 任何想法,为什么它不检查身份validation?

我正在使用本地身份validation策略,我已经注释了所有其他(Twitter,Facebook的…)

护照没有禁止访问控制器的政策。 为此,您必须创build另一个策略。

看到这个链接了解更多细节。

上面的答案提供了有用的信息。 我想说一说。

sails-generate-auth,如果用户没有login,默认情况下不会拒绝对控制器的访问。为此,您可以在api/policies/创build另一个策略。 例如:创buildsessionAuth策略如下:

 module.exports = function(req, res, next) { if (req.user) { return next(); } return res.forbidden('You are not permitted to perform this action.'); }; 

而不是显示禁止页面,您也可以呈现login页面。 为此,您需要访问AuthController.login。 所以,在config/policies添加config/policies如下:

 '*': ['passport', 'sessionAuth'], 'auth': { '*': ['passport'] } 

这有助于限制访问除authentication控制器之外的所有控制器,如login,注销和注册(如果用户未login)。