我正在使用一个外部认证系统来认证用户。但我希望捕获来自该外部系统的结果,并为成功通过身份验证且不在我的本地数据库中的用户创建一条记录。
我已经为正在运行的外部身份验证系统编写了自定义中间件,但是我不知道如何检查用户是否已经存在于我当前的数据库中。我目前使用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(),因为它不返回可选的值。
提前感谢您的任何帮助、想法或建议。
德里克
发布于 2019-04-25 04:09:57
更新:
我想我在这里找到了适合感兴趣的人的解决方案。
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()
}
}https://stackoverflow.com/questions/55834641
复制相似问题