flask-login 反复询问用户名

flask-login repeatedly asks for username

我有以下代码:

user.py

class User(Base, UserMixin):
    username = StringField(max_length=10, required=True, unique=True)
    first_name = StringField(max_length=32, required=True)
    last_name = StringField(max_length=32, required=True)

    def get_id(self):
        return self.username

app.py

app = Flask(
    __name__,
    static_folder='./static',
    template_folder='./static/templates'
)
app.config.from_pyfile(CONFIG_FILE)
app.register_blueprint(LOGIN)


@app.before_request
def request_setup():
    if current_user.is_authenticated:
        g.user = current_user.get_id()
    else:
        g.user = None

lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login.user_login'


@lm.user_loader
def load_user(username):
    return LoginController.get_user(username)

login_controller.py

LOGIN = Blueprint('login', __name__)

class LoginController(object):
    @staticmethod
    def get_user(username):
        return User.objects(username=username).first()

    @staticmethod
    @LOGIN.route('/login', methods=['GET', 'POST'])
    def user_login():
        if request.method == 'GET':
            return render_template('login.html')

        username = request.form.get('username')
        user = User.objects(username=username).first()
        if not user:
            flash('User does not exist!', 'error')
            return flask.redirect(url_for('home'))
        else:
            login_user(user)
            return flask.redirect(url_for('home'))

index.html

{% if current_user.is_authenticated %}
    <a class="item">My Profile</a>
    <a class="item" href="{{ login.user_logout }}">Logout</a>
{% else %}
    <a class="item" id="login_button">Register/Login</a>
{% endif %}

据我所知,我已经设置好了一切。但是,登录似乎实际上并没有做任何事情。

帮忙?

def get_id(self) 必须是 return id,而不是用户名。试试这个:

def get_id(self):
    return self.id

下面写在documentation:

get_id() This method must return a unicode that uniquely identifies this user, and can be used to load the user from the user_loader callback. Note that this must be a unicode - if the ID is natively an int or some other type, you will need to convert it to unicode.