gpt4 book ai didi

javascript - 是否可以在没有本地数据库的情况下使用 PassportJS?

转载 作者:行者123 更新时间:2023-11-29 21:24:46 27 4
gpt4 key购买 nike

我有一个应用程序使用与 Passport 捆绑在一起的所有 oAuth 身份验证,但我正在使用外部服务来创建我的数据库/用户。

如果我这样做:

passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true },
function(req, username, password, done) {

request.post('http://myapiservice.com/createuser').then(function(err, response, body){
return done(err, body.user);
})

}))

我该如何使用远程存储的用户呢?除了创建用户的 POST API 调用和检索用户的 GET 调用之外,我没有以任何方式连接到数据库,所以我不确定 Express 的 req.user 会如何行为/更新。

在其他地方找不到关于此的单一指南或问题,所以希望得到一些指导!

最佳答案

req.user 将由您通过调用策略的 done 回调作为第二个参数“返回”的任何内容填充。在您的示例代码中,这将是 body.user

以您想要的任何方式对用户进行身份验证是完全合法的,并且您的代码示例似乎足够合法(前提是您不是要从策略回调中创建用户,而是使用那个远程 API(见下面的解释))。

需要考虑的一件事是,策略回调并不是唯一“查找”用户数据的地方,它也发生在 passport.deserializeUser() 回调中,它被调用您要验证的每条路线。

由您决定要在 session 中存储多少用户信息(这就是 serializeUser() 所做的)。存储更多信息意味着您不必为 deserializeUser() 调用远程 API,但这也意味着任何本地存储(在 session 中)的用户数据可能与远程不同步API(如果可能的话)。

编辑:关于在策略回调中创建用户:这不是非法的,但是否推荐这取决于策略的类型。

对于针对远程服务实现身份验证的策略,如 passport-facebook,通常从策略回调中创建或更新用户,因为这是您从远程服务。

但是,在您的情况下,并且通常使用 passport-local,您可能应该只使用策略回调来进行身份验证,因为您不会总是能够访问您的所有用户信息可能需要创建一个新用户。

最好创建一个单独的 Express 路由,将 create-user-form 发布到该路由,它将负责创建用户(在本地数据库中或使用远程服务,如您的情况)。

关于javascript - 是否可以在没有本地数据库的情况下使用 PassportJS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37773427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com