passport.authenticate () используя Promise вместо пользовательского обратного вызова - PullRequest
0 голосов
/ 25 марта 2019

passport.authenticate(), как я могу определить Обещание вместо использования Пользовательского Ballback ?

Как использовать passport.authenticate(), которое упоминается здесь: http://www.passportjs.org/docs/authenticate/

На этой странице есть раздел Пользовательский шарик :

Если встроенных опций недостаточно для обработки запроса аутентификации,Пользовательский обратный вызов может быть предоставлен, чтобы позволить приложению обрабатывать успех или неудачу.

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

Пользовательский обратный вызов определяется как:

function(err, user, info){...}

ЧтоЯ хотел бы сделать, это заменить Custom Callback на Promise .

[Promise](resolve, reject)
.then(res => {
})
.catch(err => {
})

Как я могу это сделать?Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Вы можете использовать пакет es6-promisify .Это очень легко использовать, вот пример:

const {promisify} = require("es6-promisify");

// Convert the stat function
const fs = require("fs");
const stat = promisify(fs.stat);

// Now usable as a promise!
stat("example.txt").then(function (stats) {
    console.log("Got stats", stats);
}).catch(function (err) {
    console.error("Yikes!", err);
});
0 голосов
/ 02 апреля 2019

Спасибо всем за полезные ответы @ sterling-archer и @ el-finito

Я нашел связанную проблему в репозитории Passport.js Github, полезную для использования Passport для обработки обратного вызова passport.authenticate (): "Использование узла с паспортом"

export const authenticate = (req, res) =>
  new Promise((resolve, reject) => {
    passport.authenticate(
      [passport strategy],
      { session: false },
      (err, user) => {
        if (err) reject(new Error(err))
        else if (!user) reject(new Error('Not authenticated'))
        resolve(user)
      })(req, res)
    })
...