【发布时间】:2019-08-20 22:11:11
【问题描述】:
我想将自己的数据从 passport.use 传递到 passport.authenticate。
我以为 info 参数在
passport.authenticate('local', function(err, user, info)
可以用于此。
那么有没有办法做到这一点?
我的认证路线
passport.authenticate('local-register', (err, user, info) => {
if (err) {
return next(err); // 500 status
}
console.log(info);
if (info) {
console.log('rendering info ' + info);
return res.render('auth/register', { info });
} else {
if (!user) {
return res.status(409).render('auth/register');
}
req.login(user, err => {
if (err) {
console.log(err);
return next(err);
}
return res.redirect('auth/profile');
});
}
})(req, res, next);
});
我的配置文件
module.exports = passport => {
passport.use(
'local-register',
new LocalStrategy(
{
...
},
(req, email, password, done) => {
// Check if form is filled out correctly
let errors = [];
//check for same email
SCUser.findOne({ 'local.email': req.body.email }, (err, local) => {
if (local) errors.push({ text: 'Email already in use.' });
//check for same passwords
...
//check for password length
...
//abort if errors are found
if (errors.length > 0) {
const info = {
errors: errors,
...,
};
console.log(`returning info ${info}`);
return done(null, info);
}
//form is filled in correctly create a user
else {
...
}
...
到目前为止我尝试过的随机事物:
在info 后面添加, form_validate 并将所需变量更改为form_validate 不会将其传递给身份验证文件。
可能有更好的方法来处理表单验证,还没有查到,如果您有任何建议请告诉我,但我仍然想知道是否可以通过护照方法传递自定义对象.
【问题讨论】:
-
根据文档,您可以在成功时传递用户对象,在失败时传递信息对象。你真的试过看看吗?首先进行实验,如果您有问题,然后将它们发布到 SO。 passportjs.org/docs/authenticate
-
@Pop-A-Stash `` 将传递一个可选的信息参数,其中包含策略的验证回调提供的其他详细信息。`` 信息不是在失败时传递,而是在验证回调中传递?
-
你到底想做什么?我看到提到了“表单验证”。护照与该任务完全无关;它仅用于对用户进行身份验证。
标签: javascript node.js passport.js