我正在努力尝试构建一个登录方法一段时间了。我正在运行一个Flask应用程序,并使其运行良好。它都在我的机器上本地运行。目前,我使用pymongo
和MongoClient
来连接到数据库。这一切都运行良好,如果可能的话,我不想改变这一点。
我尝试使用Flask-Login
来创建一个users
类,使用usermixin
。这是我非常不成功的地方。我尝试了一些不同的事情,我的问题是如何从我的数据库中提取数据。我以前用SQL数据库做过这件事,但对于这个项目,我明确地想使用MongoDB。这是我试图遵循的教程,但我很难理解一切,因为它没有很好地解释每一行在做什么。
https://medium.com/@dmitryrastorguev/basic-user-authentication-login-for-flask-using-mongoengine-and-wtforms-922e64ef87fe
这是我与DB的连接:client = MongoClient('mongodb://localhost:27017')
这是我当前的用户类,我没有工作,我需要帮助。
class User(UserMixin):
def __init__(self, username, password_hash):
self.username = username
self.password_hash = password_hash
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def get_id(self):
return self.username
@login_manager.user_loader
def load_user(user_id):
return User.objects(pk=user_id).first()
最后一部分是我的登录表单:
@app.route('/login', methods=["GET" , "POST"])
def login():
if request.method == "GET":
return render_template("login.html", error=False)
if request.method == "POST":
check_user = request.form["username"]
if check_user:
if check_password_hash(check_user['password'], request.form["password"]):
login_user(check_user)
return redirect(url_for('index'))
我知道本教程使用MongoEngine
,我没有使用,或者还没有,但这里有一些帮助,无论是如何让上面的代码工作或如何适应它将是伟大的。当我运行此代码时,我没有得到任何错误,它只是不工作。我的测试是我尝试登录,然后我尝试转到注销页面,其中加载了以下代码:
@app.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for('index'))
当我这样做时,它不会加载页面,我得到了未经授权的页面通知。因此,我知道我的代码不工作。最后,我在一个静态文件位置的所有模板。
提前感谢您的帮助,如果有任何不清楚的地方,请询问,我会尝试添加更多的细节。越具体,我将能够帮助更好。
更新:
我意识到,描述我的数据库是如何结构化的,以确保我正确地访问它,这可能也很重要,因为这是我遇到问题的一个主要点。我有一个数据库,我的集合名为Users,它的结构是每个文档都是不同的用户记录,如下所示:
{
"_id" : 1,
"Reset" : false,
"FirstName" : "John",
"LastName" : "Doe",
"Email" : "JohnDoe@gmail.com",
"Username" : "",
"admin" : false,
"Pass" : "[hashed_password]"
}
{
"_id" : 2,
"Reset" : true,
"FirstName" : "Jane",
"LastName" : "Smith",
"Email" : "JaneSmith@hotmail.com",
"Username" : "Jane",
"admin" : false,
"Pass" : "[hashed_password]"
}
{
"_id" : 3,
"Reset" : true,
"FirstName" : "Gary",
"LastName" : "Bettman",
"Email" : "GBettman@yahoo.com",
"Username" : "HockeyGuy",
"admin" : false,
"Pass" : "[hashed_password]"
}
4条答案
按热度按时间jtw3ybtb1#
关于Flask-login你需要知道的:此扩展与应用程序的用户模型一起工作,并期望在其中实现某些属性和方法。(源代码:https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins)。
以下列出了四个必需项目:
is_authenticated
:如果用户具有有效凭据,则为True,否则为False的属性。is_active
:如果用户的帐户处于活动状态,则为True,否则为False。is_anonymous
:对于普通用户为False,对于特殊匿名用户为True的属性。get_id()
:以字符串形式返回用户的唯一标识符的方法不幸的是,官方文档和Miguel Grinberg的优秀博客中的所有示例都使用SQLAlchemy。好消息是,可以使用Pymongo实现它...
解决方案
假设我们在Mongodb端有一个集合(Users),其中包含一些登录信息。例如:
要进一步解释每行代码的作用,我建议您参考以下链接:
nzk0hqpo2#
我发现下面的作品与
flask-login
,UserMixin
,pymongo
这里是用户模型
这里是路线
如果尚未初始化,可能还需要
app
的一些代码8xiog9wr3#
我遇到了同样的问题,https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins。
我做了一些修改,让它在Mongo中运行,但我确实从MongoClient切换到了MongoEngine。
.
.
.
z6psavjg4#
关于Sazzad
在Flask文档中:
所以,不是“_id”就是“id”