Я сейчас использую Flask -Безопасность, чтобы создать страницу входа для моего сайта. Тем не менее, он может войти только по электронной почте. Я хочу, чтобы войти через электронную почту и номер мобильного телефона. Я следовал инструкциям из этого поста: flask -защищенный вход через имя пользователя, а не по электронной почте , но он не работает. Когда я ввожу номер мобильного телефона и пароль, я получу сообщение « Указанный пользователь не существует ». Вот код моей формы входа:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, HiddenField, BooleanField, PasswordField
from wtforms.validators import DataRequired, Length
from flask_security.forms import LoginForm
class MyLoginForm(LoginForm):
email = StringField('Cellphone or Email', validators=[DataRequired(), Length(8, 60)])
password = PasswordField('Passowrd', validators=[DataRequired(), Length(6, 128)])
remember = BooleanField('Remember me')
submit = SubmitField('Login')
А вот код для моих моделей:
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(60), nullable=False, unique=True)
password = db.Column(db.String(128), nullable=False)
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role',
secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
name = db.Column(db.String(50), nullable=False)
cellphone = db.Column(db.String(15), nullable=False, unique=True)
address = db.Column(db.String(150), nullable=False)
Я установил app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = ['cellphone', 'email']
, а вот мой шаблон для login_user. html:
{% from "security/_macros.html" import render_field_with_errors, render_field %}
{%- extends "base.html" %}
{% include "security/_messages.html" %}
{% block title %}Login{% endblock %}
{% block contents %}
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4 col-sm-10 col-sm-offset-1">
<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
{{ login_user_form.hidden_tag() }}
{{ render_field_with_errors(login_user_form.email, class_="form-control") }}
{{ render_field_with_errors(login_user_form.password, class_="form-control") }}
{{ render_field_with_errors(login_user_form.remember) }}
{{ render_field(login_user_form.next) }}
{{ render_field(login_user_form.submit, class_="btn btn-primary") }}
</form>
</div>
</div>
</div>
{% endblock %}
Интересно, что я должен сделать, чтобы Flask -Безопасность принимала либо мобильный телефон, либо электронную почту.