如何从sails action2调用Passport Authenticate函数
Posted
技术标签:
【中文标题】如何从sails action2调用Passport Authenticate函数【英文标题】:How to call Passport Authenticate function from sails action2 【发布时间】:2018-11-29 11:15:15 【问题描述】:我正在使用sails js v1.0。我不知道如何调用护照的身份验证功能。由于新控制器类型(action2)中没有 req、res 和 next。
我想在 Sails js v1 应用程序中使用基于 JWT 的护照验证。
fn: async function (inputs, exits)
passport.authenticate('jwt', session: false, (err, user, info) =>
)(inputs, exits);
我的配置/passport.js 看起来像
passport.use('jwt', new JWTStrategy(opts, (jwtPayload, done) =>
//find the user in db if needed. This functionality may be omitted if you store everything you'll need in JWT payload.
User.findOne(email: jwtPayload.email).then(async (err, user) =>
if (err)
return done(err, false);
if (!user)
return done(null, false, message: 'Incorrect email.');
const validate = await sails.helpers.checkPassword(inputs.password, userRecord.password);
if(!validate) return done(null, false, message : 'Wrong Password');
return done(null, user, message : 'Logged in Successfully Hola');
).catch(err =>
return done(err);
)
));
【问题讨论】:
您找到解决方案了吗? 是的,我发现了。你可以使用 this.req 来解决这个问题 能否请您发布您的解决方案作为您问题的答案? 【参考方案1】:在Sails.js document中,简单的提到了访问req
对象的两种方式。
-
使用
this.req
我将this.req
和this.res
用于passport.authenticate()
函数,并且成功了。
如您所知,登录需要req.login()
,但在我的情况下,this.req
没有通过护照派生的login()
函数。所以,我没有用这种方式。
-
使用
env
作为第三个参数。
在文档中,此方法是一种替代方法,但在我的情况下,两者是不同的。
我可以访问env.req.login()
。
所以我认为使用env
作为第三个参数比this.req
更好。
fn: async function (inputs, exits, env)
passport.authenticate('jwt', session: false , (err, user, info) =>
// Write your codes. The below is an example.
if (err || !user) return exits.unauthorized();
env.req.login(user, function (err)
if (err) exits.error(err);
return exits.success(user);
);
)(env.req, env.res);
【讨论】:
以上是关于如何从sails action2调用Passport Authenticate函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Sails.JS + GridFS 从 Mongo 检索图像文件?