我是否需要在Mongo中重新实现身份验证?

时间:2012-10-17 08:36:27

标签: python mongodb

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

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

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

据我所知,事务不是MongoDB的功能。所以,如果我有两个文件,User和Token,如果第二个无法创建,我将无法回滚创建。

我的问题是:

  1. 您如何在MongoDB上实现所描述的行为?
  2. 最好只使用MongoDB代替PostgreSQL进行身份验证,使用MongoDB代替文档吗?

1 个答案:

答案 0 :(得分: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文档从UnregisteredUsers转移到Users