求助:UUID(uuidString: String)生成大写UUID致Postgres验证失败
问题分析:UUID(uuidString:)生成大写UUID导致服务端校验失败
原因说明
iOS的UUID(uuidString:)初始化方法,不管传入的字符串是大写还是小写,生成的UUID实例在调用uuidString属性时,默认返回大写格式的字符串。这是系统API的固定行为,与输入参数的大小写无关。
解决办法
客户端调整
生成请求URL前,把UUID转为小写格式再拼接:
// 若userID是UUID实例 let lowercasedUserID = userID.uuidString.lowercased() // 使用lowercasedUserID拼接URL
如果UserDefaults中存储的是字符串形式的UUID,直接调用lowercased()处理:
if let userIDStr = UserDefaults.standard.string(forKey: "userID") { let lowercasedID = userIDStr.lowercased() // 拼接URL逻辑 }
服务端兼容(可选)
如果无法修改客户端代码,可在Vapor服务端校验时,将请求中的UUID转为小写后再与Postgres存储值对比:
// 假设从请求中获取的UUID参数为requestUserID let lowercasedRequestID = requestUserID.lowercased() // 用lowercasedRequestID执行数据库查询或校验
额外提示
Postgres的原生uuid类型本身不区分大小写,若服务端使用该类型存储UserID,即使传入大写UUID也能正确匹配。如果当前是用字符串类型存储,建议改为uuid类型,从根源避免大小写问题。
内容的提问来源于stack exchange,提问作者Peter Bien
相关产品推荐
相关产品推荐

