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 %}
据我所知,我已经设置好了一切。但是,登录似乎实际上并没有做任何事情。
current_user
还是匿名用户
Register/Login
link 仍然显示,而不是 My Profile
link。
- 对于网站的其他部分,我已设置
@login_required
,它仍然会将我重定向到登录页面。
帮忙?
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.
我有以下代码:
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 %}
据我所知,我已经设置好了一切。但是,登录似乎实际上并没有做任何事情。
current_user
还是匿名用户Register/Login
link 仍然显示,而不是My Profile
link。- 对于网站的其他部分,我已设置
@login_required
,它仍然会将我重定向到登录页面。
帮忙?
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.