使用Promise而不是自定义回调的passport.authenticate()

时间:2019-03-24 21:39:32

标签: node.js authentication promise passport.js

passport.authenticate(),如何定义 Promise ,而不是使用 Custom Ballback

此处引用了passport.authenticate()的用法: http://www.passportjs.org/docs/authenticate/

在此页面中,有一个部分自定义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 代替此 Custom Callback

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

我该怎么做?谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用es6-promisify软件包。它非常易于使用,下面是一个示例:

df = pd.DataFrame({'a':['1','2','3']})
df['b'] = np.nan
df['b']=df['b'].astype(object)
for index in df.index:
    df.loc[index, 'b'] = [{'a':1}]
    print(df.loc[index, 'b'] ,index)

[{'a': 1}] 0
[{'a': 1}] 1
[{'a': 1}] 2
df
   a           b
0  1  [{'a': 1}]
1  2  [{'a': 1}]
2  3  [{'a': 1}]

答案 1 :(得分:0)

感谢大家对@ sterling-archer和@ el-finito的有用答复

我发现Passport.js Github存储库中的一个相关问题有助于使用Passport处理password.authenticate()回调: "Using node's promisify with passport"

List<String> a = Arrays.asList("werdsegs", "wsghnmrst", "vaasdfdas", "iujhgfds");
List<String> b = Arrays.asList("aalaksdjf", "erftghjuk", "werdsejfksd", "asdklgjaklgj", "poijgndf");

Set<String> set = a.stream().map(s -> s.substring(0,5)).collect(Collectors.toSet());
List<String> c = b.stream().filter(s -> ! set.contains(s.substring(0,5))).collect(Collectors.toList());

System.out.println(c); // prints: [aalaksdjf, erftghjuk, asdklgjaklgj, poijgndf]