是否可以在没有本地数据库的情况下使用 PassportJS?
Is it possible to use PassportJS without a local database?
我有一个应用程序使用与护照捆绑在一起的所有 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
会表现/得到更新。
在其他地方找不到关于此的单一指南或问题,因此希望得到一些指导!
通过调用策略的 done
回调,req.user
将被填充为 "returning" 作为第二个参数。在您的示例代码中,那将是 body.user
.
以您想要的任何方式对用户进行身份验证是完全合法的,并且您的代码示例似乎足够合法(前提是您不是要从策略回调中创建 用户, 但使用那个遥控器验证一个 API (见下面的解释))。
需要考虑的一件事是,策略回调并不是唯一获取用户数据的地方 "looked up",它也发生在 passport.deserializeUser()
回调中,它会为您调用的每个路由调用想要认证。
由您决定要在会话中存储多少用户信息(这就是 serializeUser()
所做的)。存储更多信息意味着您不必为 deserializeUser()
调用远程 API,但这也意味着任何本地存储(在会话中)的用户数据可能与远程 API(如果可以的话)。
编辑:关于在策略回调中创建用户:这不是非法的,但是否推荐取决于策略类型。
对于针对远程服务实施身份验证的策略,如 passport-facebook
,通常从策略回调中创建或更新用户,因为这是您从远程服务接收信息的唯一入口点。
但是,在您的情况下,通常 passport-local
,您可能应该只使用策略回调来进行身份验证,因为您不会总是能够访问您可能需要的所有用户信息创建一个新用户。
最好创建一个单独的 Express 路由,将创建用户表单发布到该路由,这将负责创建用户(在本地数据库中或使用远程服务,如您的情况)。
我有一个应用程序使用与护照捆绑在一起的所有 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
会表现/得到更新。
在其他地方找不到关于此的单一指南或问题,因此希望得到一些指导!
done
回调,req.user
将被填充为 "returning" 作为第二个参数。在您的示例代码中,那将是 body.user
.
以您想要的任何方式对用户进行身份验证是完全合法的,并且您的代码示例似乎足够合法(前提是您不是要从策略回调中创建 用户, 但使用那个遥控器验证一个 API (见下面的解释))。
需要考虑的一件事是,策略回调并不是唯一获取用户数据的地方 "looked up",它也发生在 passport.deserializeUser()
回调中,它会为您调用的每个路由调用想要认证。
由您决定要在会话中存储多少用户信息(这就是 serializeUser()
所做的)。存储更多信息意味着您不必为 deserializeUser()
调用远程 API,但这也意味着任何本地存储(在会话中)的用户数据可能与远程 API(如果可以的话)。
编辑:关于在策略回调中创建用户:这不是非法的,但是否推荐取决于策略类型。
对于针对远程服务实施身份验证的策略,如 passport-facebook
,通常从策略回调中创建或更新用户,因为这是您从远程服务接收信息的唯一入口点。
但是,在您的情况下,通常 passport-local
,您可能应该只使用策略回调来进行身份验证,因为您不会总是能够访问您可能需要的所有用户信息创建一个新用户。
最好创建一个单独的 Express 路由,将创建用户表单发布到该路由,这将负责创建用户(在本地数据库中或使用远程服务,如您的情况)。