sails.js - 如何从sails action2调用Passport Authenticate函数
问题描述
我正在使用sails js v1.0。我不知道如何调用护照的身份验证功能。由于 req、res 和 next 在sails 新控制器类型(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 文档req
中,简单地提到了访问对象的两种方式。
- 使用
this.req
我使用this.req
andthis.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);
}
推荐阅读
- javascript - 我们如何在 Angular 8 中添加链接?
- r - 使用具有多个条件的 gsub 替换 PDF 中的单词列表
- angular - Angular 组件和 ngOnInit 的自定义装饰器
- rest - 在 GET 方法中获取用户角色
- while-loop - Python多处理while循环,返回和追加输出
- python - 在 Python 中为动态方法调用添加类型提示
- python - 如何使用 AWS Sagemaker XGBoost 框架?
- python - 多输入双向RNN错误值错误?
- python - json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 部署到云时,但不在本地?
- c++ - 为什么我不断收到类错误的重新定义?