1

我正在使用外部身份验证系统对用户进行身份验证。但我想从该外部系统捕获结果,并为成功通过身份验证且尚未在我的本地数据库中的用户创建记录。

我已经为正在工作的外部身份验证系统编写了自定义中间件,但我不知道如何检查用户是否已经存在于我当前的数据库中。我目前使用 FluentSQLite 作为我的后备数据库。

let creds = returnFromExternalAuth()
// creds = ["id": "1", "emailAdress": "blah@blah.com", "firstName": "Test", "lastname": "User"]

let user = User.query(on: request).filter(\.ID == id).first()
// returns EventLoopFuture<User?>

我想做的是

if let user = try User.query(on: request).filter(\.ID == id).first(){

// Return the found DB user
return User.query(on: request).filter(\.ID == id).first()

} else {

// create db entry for user
// Query and return the newly created DB object
return User.query(on: request).filter(\.ID == id).first() 

}

这不适用于 .first(),因为它不返回 Optional。

提前感谢您的任何帮助、想法或建议。

德里克

4

1 回答 1

1

更新:

我想我在这里工作是为任何感兴趣的人提供的解决方案。

return User.query(on: request).filter(\User.ID == id).first().flatMap { optional in
   if let _ = optional {
      return User.query(on: request).filter(\User.ID == id).first()
   } else {
      _ = User(ID: creds["id"], emailAddress: creds["emailAddress"], firstName: creds["firstName"], lastName: creds["lastName"]).save(on: request)
      return User.query(on: request).filter(\.ID == id).first()
   }
}
于 2019-04-24T20:09:56.963 回答