我希望在User
模型中有一个字段,通过它用户以username
而不是{
我定义:app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = 'username'
但我仍然得到:
user_datastore.add_role_to_user(name, 'mgmt')
File "/Users/boazin/sentinal/sentinel-cloud/.env/lib/python2.7/site-packages/flask_security/datastore.py", line 105, in add_role_to_user
user, role = self._prepare_role_modify_args(user, role)
File "/Users/boazin/sentinal/sentinel-cloud/.env/lib/python2.7/site-packages/flask_security/datastore.py", line 72, in _prepare_role_modify_args
user = self.find_user(email=user)
File "/Users/boazin/sentinal/sentinel-cloud/.env/lib/python2.7/site-packages/flask_security/datastore.py", line 203, in find_user
return self.user_model.query.filter_by(**kwargs).first()
File "/Users/boazin/sentinal/sentinel-cloud/.env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 1333, in filter_by
for key, value in kwargs.items()]
File "/Users/boazin/sentinal/sentinel-cloud/.env/lib/python2.7/site-packages/sqlalchemy/orm/base.py", line 383, in _entity_descriptor
(description, key)
InvalidRequestError: Entity '<class 'flask_app.models.User'>' has no property 'email'
看来电子邮件是硬编码到烧瓶安全。。。在
我能换一下吗?在
编辑: 用户模型(如评论中所要求的):
^{pr2}$
来自https://pythonhosted.org/Flask-Security/models.html
字段
id, email, password, active
是基本的。所以添加只需添加您的自定义
username
字段。在要使用用户名而不是电子邮件地址登录(使用Flask Security 1.7.0或更高版本),可以在
User
模型中将email
字段替换为username
字段{cd4>更新配置。在
^{pr2}$接下来,为了允许用户使用用户名而不是电子邮件登录,我们将使用LoginForm validation method假定用户标识属性在
email
表单字段中。在这样,我们就可以使用用户名登录,而不必重写验证方法或登录模板。当然,这是一种黑客攻击,更正确的方法是向
ExtendedLoginForm
类添加一个自定义的validate
方法,该方法检查username
表单字段,并相应地更新登录模板。在然而,使用上述地址登录的方法更容易。为此,请定义一个同时包含用户名和电子邮件字段的用户模型。在
并更新
app
配置。在最后,创建自定义登录表单。在
现在,当登录时,Flask Security将接受电子邮件表单字段中的电子邮件或用户名。在
相关问题 更多 >
编程相关推荐