如何在Flask中使用MongoDB内置访问控制?

时间:2019-05-15 15:40:17

标签: python-3.x mongodb flask

我有一个Flask应用程序,该应用程序使用pymongo访问mongo数据库并满足用户的请求。 我在Mongo中启用了访问控制,现在有多个用户与不同的角色相关联。更具体地说,每个用户仅在数据库的特定集合子集中具有读写特权。

我希望用户登录到应用程序,并且只能访问其特定的集合子集。这意味着每个需要从数据库中获取一些数据的用户请求都绑定到(特定的)经过数据库身份验证的连接。

flask的主要扩展,例如flask-login和flask-security似乎没有使用MongoDB自己的身份验证机制。

已经寻找了一段时间,但我无法解决这个问题。

2 个答案:

答案 0 :(得分:1)

按照MongoDB documentation制作连接字符串。

mongodb://[username:password@]host1[:port1][,...hostN[:portN]]][/[database][?options]]

mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/admin

您可以使用PyMongo库连接到MongoDB。

from pymongo import MongoClient
from flask import Flask, request

app = Flask(__name__)

@app.route('/login')
def login():
    data = request.get_json()
    username = data['username']
    password = data['password']
    database = data['database']
    uri = 'mongodb://'+username+':'+password+'@localhost:27017/'+database
    print(uri) 
    app.config['uri'] = uri


@app.route('/some_endpoint')
def do_some_work():
    uri = app.config['uri']
    client = MongoClient(uri)
    # now use this as per your requirement.       

    client.close() 

if __name__ == '__main__':
    app.run()

这只是一个例子。您可以将其存储在app.config中,并根据需要使用它。

您可能想看到的另一个reference

答案 1 :(得分:0)

您可能要重新考虑这种方法,因为与每个登录到您应用的用户建立新的数据库连接可能无法很好地扩展,因为Mongo为每个新连接创建了一个新线程。

请参阅:mongodb-max-connections

我会考虑为烧瓶使用一些RBAC,例如flask-security