我有带有 MongoDB 和 KMP 应用程序的 Parse 服务器,其中登录方法。
@POST("login")
@Headers(
value = [
"${ParseHeaders.CONTENT_TYPE}: application/json",
"${ParseHeaders.APPLICATION_ID}: ${ParseConstants.APPLICATION_ID}",
"${ParseHeaders.REST_API_KEY}: ${ParseConstants.REST_API_KEY}",
],
)
suspend fun logIn(@Body credentials: ParseLoginCredentials): ParseUserResponse
我需要使
username
不区分大小写。目前,用户名以杂乱无章的方式存储在 MongoDB 中。我们需要在服务器端构建此结构,因此 Parse 服务器中的登录 username
必须不区分大小写。我在 Parse 后端代码中没有看到任何登录功能,但由于某种原因登录仍然有效。也许它是由 Parse 内部处理的。我在 Parse 服务器代码中编写了一个拦截器,但它不起作用。
Parse.Cloud.define("login", async (req) => {
try {
const user = await Parse.User.logIn(req.params.username.toLowerCase(), req.params.password);
return user;
} catch (error) {
const errorMessages = {
101: "Login error.",
};
const errorCode = error.code || 0;
const translatedError = errorMessages[errorCode] || "Login error.";
throw new Parse.Error(errorCode, translatedError);
}
});
MongoDB 端有什么选项可以处理这个问题吗?或者说如何用 Parse Server 来完成呢?我是否需要编写额外的代码,例如不区分大小写的登录挂钩,或者还有其他解决方案吗?
如果您可以在
Parse.User.logIn
中修改 MongoDB 的查询,请使用 regex
和 /i
选项。尝试使用 VSCode 或 Intellij 打开您的项目,设置打开所有隐藏目录,使用 Ctrl + Click
快捷方式进入 logIn
即可找到位置代码。
使用 Mongodb,您可以在
strength: 2
中配置 collation
以区分大小写,请参阅文档 here。只需为 username
字段创建索引即可。
db.Users.createIndex(
{ username: 1 },
{
collation: {
locale: 'en',
strength: 2
}
}
);