如何使 Parse 服务器登录不区分大小写?

问题描述 投票:0回答:1

我有带有 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 来完成呢?我是否需要编写额外的代码,例如不区分大小写的登录挂钩,或者还有其他解决方案吗?

我也尝试过修改和隐藏MongoDB上`_User`实体中的一些索引,但没有效果。
enter image description here

javascript parse-platform
1个回答
0
投票

如果您可以在

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
    }
  }
);
© www.soinside.com 2019 - 2024. All rights reserved.