首次访问时flask_login显示未经身份验证

时间:2019-01-08 04:15:14

标签: python flask

我有一个烧瓶应用程序正在使用flask_login,说“请登录以访问此页面”

这是我的model.py

class Trainer(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    trainer_name = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    pokemon = db.relationship('Pokemon', backref='pokemon', lazy='dynamic')

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<Trainer {}>'.format(self.trainer_name)


@login.user_loader
def load_user(id):
    return Trainer.query.get(int(id))

这是routes.py

@app.route('/')
@app.route('/index')
@login_required
def index():
    pokemon = [
        {
            'name': 'Jolteon',
            'metaData': {
                'type': 'Electric',
                'moves': [
                    {'name': 'Thunderbolt'},
                    {'name': 'Tackle'}
                ]
            }
        },
        {
            'name': 'Eevee',
            'metaData': {
                'type': 'Normal',
                'moves': [
                    {'name': 'Tackle'},
                    {'name': 'Tail Whip'}
                ]
            }

        }
    ]
    return render_template('index.html', title='Home', pokemon=pokemon)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = LoginForm()
    if form.validate_on_submit():
        trainer = Trainer.query.filter_by(trainer_name=form.trainer_name.data).first()
        if trainer is None or not trainer.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(trainer, remember=form.remember_me.data)
        next_page = request.args.get('next')
        if not next_page or url_parse(next_page).netloc != '':
            next_page = url_for('index')
        return redirect(next_page)
    return render_template('login.html', title='Sign In', form=form)

我注意到,即使我将登录页面指定为“登录”

在我的init.py

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login = LoginManager(app)
login.login_view = 'login'

我注意到,当我启动flask应用程序时,它会将我发送到这里:localhost:5000/login?next=%2F

如果我导航到

localhost:5000/login

那我没有bug

我认为我的问题是URL的下一部分,但是我不确定这是怎么到达的,我调试了我的应用程序,甚至没有触及处理next_page的那一部分。我是python和flask的新手,所以将不胜感激!

谢谢

编辑:我已经包括了更新的routes.py。我认为我的错误是我误解了init.py在做什么。我想当应用启动时,它会将您发送到那里。我可以看到为什么我会落在'/'上并被重定向,这会引起我遇到的问题。谢谢

0 个答案:

没有答案