部署在Heroku+PostgreSQL环境下Flask Login无法登录问题
Flask认证系统登录失败排查求助
基于Flask + Flask-SQLAlchemy开发的简易认证页面,部署在Heroku平台并使用PostgreSQL数据库。目前用户注册功能正常,但登录操作始终无法完成。本地运行时同样存在该问题,已尝试以下操作但未解决:
- 多次执行数据库迁移
- 安装psycopg2依赖
- 重新配置User表结构
登录路由代码
@indexbp.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: flash("You have already logged in!", 'success') return redirect('/') form = LoginForm() if form.validate_on_submit(): try: user = User.query.filter_by(username=form.username.data).first() if bcrypt.check_password_hash(user.hashed_password, form.password.data): login_user(user) flash('You are logged in!', 'success') return redirect('/') except AttributeError: db.session.rollback() flash('Wrong username, password or email. Please try again!', 'info') return redirect('/login') except Exception as e: print(e) db.session.rollback() flash('Something went wrong inside our systems, please try again later. If this problem persists, please contact our admin team.', 'danger') return redirect('/login') return render_template('login.html', form=form)
注册路由代码
@indexbp.route('/register', methods=['GET', 'POST']) def register(): if current_user.is_authenticated: flash("You have already logged in!", 'success') return redirect('/') form = RegisterForm() if form.validate_on_submit(): try: new_user = User(username=form.username.data, hashed_password=bcrypt.generate_password_hash(form.password.data), user_id=str(uuid.uuid1())) db.session.add(new_user) db.session.commit() return redirect('/login') except Exception as e: print(str(e)) db.session.rollback() flash('Something went wrong inside our systems, please try again later. If this problem persists, please contact our admin team.', 'danger') return redirect('/register') return render_template('register.html', form=form)
User表模型
# User table class User(db.Model, UserMixin): id = db.Column(db.Integer(), primary_key=True, unique=True, nullable=False) username = db.Column(db.String(), unique=True, nullable=False) hashed_password = db.Column(db.String(), unique=False, nullable=False) user_id = db.Column(db.String(), unique=True, nullable=False)
Flask核心配置
app.config['SQLALCHEMY_DATABASE_URI'] = "link-to-database-provided-by-heroku" app.config['SECRET_KEY'] = "g3AbKqKhxhCACvFNlNgLv802LUBwXQKr4X4Z9J9d"
内容的提问来源于stack exchange,提问作者Bùi Bảo Hoàng
相关产品推荐
相关产品推荐

