Я работаю, чтобы попытаться создать метод входа в систему некоторое время.Я использую приложение Flask, и оно работает хорошо.Все это работает локально на моей машине.В настоящее время я использую pymongo
и MongoClient
для подключения к БД.Это все работает хорошо, и я хотел бы не менять это, если это возможно.
Я пытаюсь использовать Flask-Login
для создания users
класса, используя usermixin
.Это где я был крайне неудачным.Я пробовал несколько разных вещей, и моя проблема заключается в том, как извлечь данные из моей БД.Я делал это ранее с базой данных SQL, но для этого проекта я явно хочу использовать MongoDB.Это учебник, которому я пытался следовать, но мне сложно все понять, потому что он не очень хорошо объясняет, что делает каждая строка.
https://medium.com/@dmitryrastorguev/basic-user-authentication-login-for-flask-using-mongoengine-and-wtforms-922e64ef87fe
Это мое соединение с моей БД: 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]"
}