2016-02-29 66 views
0
passport.authenticate('local-register',{ 
      successRedirect: '/login', 
      failureRedirect: '/path_to_greatness', 
     })(req, res, next); 

我在写一个无状态的API,所以上面的方法就像successRedirect不会满足我的需求。但我仍然想使用护照层,我该如何回调?Passport auth callback而不是重定向

+0

这是相当开放的。你可以尝试一下并询问它是否不起作用? – icedwater

回答

1

您可以将回调传递给passport.authenticate,这应该适合各种各样的用例。在传递回调时,您必须自己创建会话(假设认证成功)。 (docs

下面是使用一个简单的例子:

function handler(req, res, next) { 
    // assuming we're using a "local" strategy 
    passport.authenticate('local', (err, user, params) => { 
    if (err) return next(err) 
    if (!user) return next(new Error('Authentication Failed')) 

    // user is authenticated, create a session 
    req.logIn(user, (err) => { 
     if (err) return next(err) 
     // handle response 
     res.status(200).json({ some: 'data' }) 
    }) 
    })(req, res, next) 
} 
+0

自从他提到他使用JWT以来,他不需要任何会话。 – Jennifer

+0

@Jennifer OP没有提及智威汤逊。是的,一个纯粹的无状态API会使用类似于JWT的认证系统,但是OP明确要求为passportjs提供一个回调解决方案,它依赖于会话。 – Nindaff

+0

如果我想使用智威汤逊,这套房是否会满足我的需求?如何在护照中禁用会话? –