1

我的 Flask 应用程序目前使用 PostgreSQL 来存储所有身份验证信息(用户、令牌)并与之交互。对于其他逻辑,我需要使用 MongoDB。我喜欢使用一种技术而不是多种技术来降低应用程序的复杂性(例如,仅使用 Redis 而不是 Redis + memcached)。

所以现在我正在考虑仅使用 MongoDB,将其用作身份验证过程的后端。

当前工作流程如下:PostgreSQL 存储两个表:User 和 Token。当我注册用户时,我打开事务,将他的数据(用户名,登录名,密码)存储在 User 表中,然后将激活令牌插入 Token 表,然后发送激活信,然后关闭事务。因此,在代码中存储用户、令牌或以后出现问题,当我尝试发送电子邮件时,事务将被回滚。它可以防止用户创建但没有令牌的情况,因此无法激活帐户。

据我所知,事务不是 MongoDB 的功能。因此,如果我将有两个文档,用户和令牌,如果无法创建第二个,我将无法回滚创建第一个。

我的问题是:

  1. 您将如何在 MongoDB 上实现所描述的行为?
  2. 仅将 MongoDB 用于所有内容而不是 PostgreSQL 用于身份验证和 MongoDB 用于文档是个好主意吗?
4

1 回答 1

3

是的,在这种情况下,您必须自己实现注册逻辑。例如,如果您存储以下文档:

user : {
    name : 'Alex Black'
    email : 'alex@example.com'
    token : {
        value : 'some_random_token'     # subject for indexing
        expires : '00.00.00.18.11.2012' # use MongoDB date here
    }
}

然后,例如一个 cron 脚本应该删除所有过期的用户。但是一个技巧是使用 Mongo 的 NoSQL 特性!

只需创建两个单独的集合:Users例如UnregisteredUsers. 将用户信息存储到UnregisteredUsers并仅在确认注册时将user文档从转移UnregisteredUsersUsers

于 2012-10-17T09:04:30.867 回答