我有一个烧瓶应用程序,该应用程序使用pymongo访问mongo数据库并满足用户的请求。我启用了Mongo的访问控制,现在有几个与不同角色相关联的用户。更具体地说,每个用户仅在DB中的特定集合中都有读写特权。
我希望用户登录应用程序,并仅访问其特定的集合子集。这意味着每个需要从数据库获取某些数据的用户请求都伴有(特定的(DB认证连接。
烧瓶和烧瓶安全等烧瓶的主要扩展似乎不使用MongoDB自己的身份验证机制。
现在一直在寻找一段时间,但我无法解决。
根据用于制作连接字符串的文档。
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中并根据需要使用。
您可能想看到的另一个参考。
您可能需要重新考虑该方法作为与每个用户打开新的DB连接的方法,将登录到您的应用程序的每个用户可能不太扩展,因为Mongo为每个新连接创建了一个新线程。<<<<<<<<<<<<<</p>
参见:mongodb-max-connections
我会考虑一些烧瓶的rbac,例如烧瓶安全。