Python Can';t使用flask\u登录访问登录所需的路由
我正在编写一个简单的flask应用程序,我已经完成了所有的登录过程。我没有收到错误,但是当我尝试登录时出现了问题,尽管我已经正确注册,并且我的用户数据在数据库中,但不知怎么的,程序无法识别我是用户。因此,最终发生的事情是我尝试访问app_home route,因为这是一个需要登录的路由,并且登录没有保存我的数据,所以我在登录页面中陷入了一个循环,而无法执行任何操作 以下是所有代码: server.py:Python Can';t使用flask\u登录访问登录所需的路由,python,authentication,flask,flask-login,login-required,Python,Authentication,Flask,Flask Login,Login Required,我正在编写一个简单的flask应用程序,我已经完成了所有的登录过程。我没有收到错误,但是当我尝试登录时出现了问题,尽管我已经正确注册,并且我的用户数据在数据库中,但不知怎么的,程序无法识别我是用户。因此,最终发生的事情是我尝试访问app_home route,因为这是一个需要登录的路由,并且登录没有保存我的数据,所以我在登录页面中陷入了一个循环,而无法执行任何操作 以下是所有代码: server.py: from flask import Flask from flask_mongoengine
from flask import Flask
from flask_mongoengine import MongoEngine
from flask_login import LoginManager
from models import User
app = Flask(__name__)
...
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
@login_manager.user_loader
def load_user(email):
return User.objects(email=email).first()
if __name__ == '__main__':
app.run(debug=True)
from flask_login import UserMixin
from mongo_setup import db
class User(UserMixin, db.Document):
email = db.StringField()
password = db.StringField()
from flask import Blueprint, render_template, redirect, url_for, request, flash
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import login_user, logout_user, login_required
auth = Blueprint('auth', __name__)
from mongo_setup import db
from models import User
...
@auth.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
email = request.form.get('email')
password = request.form.get('password')
user_email = User.objects(email=email).first()
if user_email:
flash("Email address already exists")
return redirect(url_for('auth.signup'))
User(email=email,
password=generate_password_hash(password, method='sha256')
).save()
return render_template('signup.html')
@auth.route('/login')
def login_get():
return render_template('login.html')
@auth.route('/login', methods=['POST'])
def login():
email = request.form.get("email")
password = request.form.get("address")
remember = True if request.form.get('remember') else False
user = User.objects(email=email).first()
if not user or not check_password_hash(user.password, password):
flash('Please check your login details and try again.')
return redirect(url_for('auth.login'))
login_user(user, remember=remember)
return redirect(url_for('auth.app_home'))
@auth.route('/app/<address>/<data>/<delete>', methods=['GET', 'POST'])
@login_required
def app_home(address, data, delete):
return render_template('app.html')
型号。py:
from flask import Flask
from flask_mongoengine import MongoEngine
from flask_login import LoginManager
from models import User
app = Flask(__name__)
...
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
@login_manager.user_loader
def load_user(email):
return User.objects(email=email).first()
if __name__ == '__main__':
app.run(debug=True)
from flask_login import UserMixin
from mongo_setup import db
class User(UserMixin, db.Document):
email = db.StringField()
password = db.StringField()
from flask import Blueprint, render_template, redirect, url_for, request, flash
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import login_user, logout_user, login_required
auth = Blueprint('auth', __name__)
from mongo_setup import db
from models import User
...
@auth.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
email = request.form.get('email')
password = request.form.get('password')
user_email = User.objects(email=email).first()
if user_email:
flash("Email address already exists")
return redirect(url_for('auth.signup'))
User(email=email,
password=generate_password_hash(password, method='sha256')
).save()
return render_template('signup.html')
@auth.route('/login')
def login_get():
return render_template('login.html')
@auth.route('/login', methods=['POST'])
def login():
email = request.form.get("email")
password = request.form.get("address")
remember = True if request.form.get('remember') else False
user = User.objects(email=email).first()
if not user or not check_password_hash(user.password, password):
flash('Please check your login details and try again.')
return redirect(url_for('auth.login'))
login_user(user, remember=remember)
return redirect(url_for('auth.app_home'))
@auth.route('/app/<address>/<data>/<delete>', methods=['GET', 'POST'])
@login_required
def app_home(address, data, delete):
return render_template('app.html')
auth.py:
from flask import Flask
from flask_mongoengine import MongoEngine
from flask_login import LoginManager
from models import User
app = Flask(__name__)
...
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
@login_manager.user_loader
def load_user(email):
return User.objects(email=email).first()
if __name__ == '__main__':
app.run(debug=True)
from flask_login import UserMixin
from mongo_setup import db
class User(UserMixin, db.Document):
email = db.StringField()
password = db.StringField()
from flask import Blueprint, render_template, redirect, url_for, request, flash
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import login_user, logout_user, login_required
auth = Blueprint('auth', __name__)
from mongo_setup import db
from models import User
...
@auth.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
email = request.form.get('email')
password = request.form.get('password')
user_email = User.objects(email=email).first()
if user_email:
flash("Email address already exists")
return redirect(url_for('auth.signup'))
User(email=email,
password=generate_password_hash(password, method='sha256')
).save()
return render_template('signup.html')
@auth.route('/login')
def login_get():
return render_template('login.html')
@auth.route('/login', methods=['POST'])
def login():
email = request.form.get("email")
password = request.form.get("address")
remember = True if request.form.get('remember') else False
user = User.objects(email=email).first()
if not user or not check_password_hash(user.password, password):
flash('Please check your login details and try again.')
return redirect(url_for('auth.login'))
login_user(user, remember=remember)
return redirect(url_for('auth.app_home'))
@auth.route('/app/<address>/<data>/<delete>', methods=['GET', 'POST'])
@login_required
def app_home(address, data, delete):
return render_template('app.html')
从flask导入蓝图、呈现模板、重定向、url、请求、闪存
从werkzeug.security导入生成密码散列,检查密码散列
从flask\u登录导入登录用户、注销用户、需要登录
auth=蓝图('auth',_名称__)
从mongo_安装程序导入数据库
从模型导入用户
...
@auth.route('/signup',methods=['GET','POST'])
def signup():
如果request.method==“POST”:
email=request.form.get('email')
password=request.form.get('password')
user\u email=user.objects(email=email).first()
如果用户发送电子邮件:
flash(“电子邮件地址已存在”)
返回重定向(url_for('auth.signup'))
用户(电子邮件=电子邮件,
password=generate\u password\u hash(password,method='sha256')
).save()
返回呈现模板('signup.html')
@身份验证路由(“/login”)
def login_get():
返回呈现模板('login.html')
@auth.route('/login',methods=['POST'])
def login():
电子邮件=request.form.get(“电子邮件”)
密码=request.form.get(“地址”)
如果request.form.get('memory')或False,则memory=True
user=user.objects(email=email).first()
如果不是用户或未检查密码\u散列(user.password,password):
flash('请检查您的登录详细信息并重试')
返回重定向(url_for('auth.login'))
登录用户(用户,记住=记住)
返回重定向(url_for('auth.app_home'))
@auth.route('/app//',methods=['GET','POST'])
@需要登录
def应用程序主页(地址、数据、删除):
返回渲染模板('app.html')
您需要更改load\u user
方法以通过id
查找user
对象,或者在user
模型上重载get\u id()
方法以匹配load\u user()
方法以通过电子邮件唯一标识用户
见:
您需要更改load\u user
方法以通过id
查找user
对象,或者在user
模型上重载get\u id()
方法以匹配load\u user()
方法以通过电子邮件唯一标识用户
见: