首页 > 解决方案 > passport.authenticate() 使用 Promise 而不是自定义回调

问题描述

passport.authenticate(),如何定义Promise而不是使用自定义回球

如何使用passport.authenticate()在这里引用:http: //www.passportjs.org/docs/authenticate/

在此页面中,有一个部分Custom Ballback

如果内置选项不足以处理身份验证请求,则可以提供自定义回调以允许应用程序处理成功或失败。

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){...}

我想做的是用 Promise 替换这个自定义回调

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

我怎样才能做到这一点?谢谢你。

标签: node.jsauthenticationpromisepassport.js

解决方案


您可以使用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);
});

推荐阅读