如何从 sails action2 调用 Passport Authenticate 函数
How to call Passport Authenticate function from sails action2
我正在使用 sails js v1.0。我不知道如何调用护照的身份验证功能。由于 req、res 和 next 在 sails new controller type (action2) 中不存在。
我想在 sails js v1 应用程序中使用基于 JWT 的护照身份验证。
fn: async function (inputs, exits) {
passport.authenticate('jwt', {session: false}, (err, user, info) => {
})(inputs, exits);
}
我的 config/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);
})
}));
在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 js v1.0。我不知道如何调用护照的身份验证功能。由于 req、res 和 next 在 sails new controller type (action2) 中不存在。
我想在 sails js v1 应用程序中使用基于 JWT 的护照身份验证。
fn: async function (inputs, exits) {
passport.authenticate('jwt', {session: false}, (err, user, info) => {
})(inputs, exits);
}
我的 config/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);
})
}));
在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);
}