JSON Token验证后不会加载值

JSON Token won't load the value after being verified

一旦我进入 verify_token 函数,它就会继续执行 except 语句而不是返回 'id_user' 中的值,我不确定为什么。我正在使用这些库。 flask-login、sqlalchemy、itsdangerous for jsonwebserializer 和 wtforms。

函数

def get_reset_token(user):
    serial = Serializer(app.config['SECRET_KEY'], expires_in=900) # 15 mins in seconds
    return serial.dumps({'id_user':user.id}).decode('utf-8')

def verify_token(token):
    serial = Serializer(app.config['SECRET_KEY'])
    try:
        user_id = serial.load(token)['id_user']
    except:
        return None
    return Users.query.get('id_user')

def send_mail(user):
    token = get_reset_token(user)
    message = Message('Password Reset Request', recipients = [user.email], sender='noreply@gmail.com')
    message.body= f'''
To Reset your password, click the following link:

{url_for('reset_token', token = token, _external = True)}

If you did not send this email, please ignore this message.
'''
    mail.send(message)

路线

@app.route('/password_reset', methods = ['GET', 'POST'])
def password_reset():
    form = Password_request()
    if request.method == "POST":
        if form.validate_on_submit:
            user = Users.query.filter_by(email = form.email.data).first()
            send_mail(user)
            flash('Check your email. Password change request has been sent')
            return redirect(url_for('login'))
        else:
            flash('Your email was not linked to an account')
    return render_template('password_reset.html', form = form)


@app.route('/password_reset/<token>', methods = ['GET', 'POST'])
def reset_token(token):
    user = verify_token(token)
    if user == None:
        flash('The token is invalid or expired')
        return redirect(url_for('password_reset'))

    form = Password_success()
    if form.validate_on_submit:
        hashed_password=generate_password_hash(form.password.data, method = 'sha256')
        user.password = hashed_password
        db.session.commit()
        flash('Your password has been updated!')
    return redirect(url_for('signup'))
def verify_token(token):
    serial = Serializer(app.config['SECRET_KEY'])
    try:
        user_id = serial.load(token)['id_user']
    except:
        return None
    return Users.query.get('id_user') # this looks wrong

verify_token的最后一行不应该是return Users.query.get(user_id)吗?您将令牌的值分配给该变量,然后忽略它并告诉 SQLAlchemy 查找 ID 为字符串值 'id_user' 的记录,我怀疑这是您打算做什么。

def verify_token(token):
    serial = Serializer(app.config['SECRET_KEY'])
    try:
        user_id = serial.load(token)['id_user']
    except:
        return None
    return Users.query.get(user_id) # What happens when you change this?