Python Can';t使用flask\u登录访问登录所需的路由

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

我正在编写一个简单的flask应用程序,我已经完成了所有的登录过程。我没有收到错误,但是当我尝试登录时出现了问题,尽管我已经正确注册,并且我的用户数据在数据库中,但不知怎么的,程序无法识别我是用户。因此,最终发生的事情是我尝试访问app_home route,因为这是一个需要登录的路由,并且登录没有保存我的数据,所以我在登录页面中陷入了一个循环,而无法执行任何操作

以下是所有代码:

server.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')
型号。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()
方法以通过电子邮件唯一标识用户

见: