Flask-Security のコードを調べたところ、何が datastore.activate_user() を実行するのかがわからないため、current_user.is_active は True を返しますか?
from flask.ext.security.utils import login_user
class LoginView(BaseView):
methods = ['GET', 'POST']
def dispatch_request(self):
form = CustomLoginForm()
if form.validate_on_submit():
login_user(form.user, remember=True)
flash("Logged in successfully.")
return redirect(request.args.get('next') or url_for('main'))
return render_template("login.html", form=form, **self.content)
カスタム LoginForm を使用します。フォームは検証されますが、login_user は False を返します。
メインのmanage.pyからの抜粋:
app = create_app()
manager = Manager(app)
# Setup Flask-Security
user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role)
security = Security(app, user_datastore)
ここにmodels.pyがあります
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Role(RoleMixin, db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True, info={'verbose_name': 'Role name'})
description = db.Column(db.String(255))
def __repr__(self):
return '<Role %r>' % (self.name)
class User(UserMixin, db.Model):
id = Column(Integer, primary_key=True)
name = Column(String(128), info={'verbose_name': 'User name', })
password = Column(String(64))
company = Column(String(64))
location = Column(String(64))
email = Column(String(64))
active = Column(Boolean)
roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'))
last_login_at = Column(DateTime)
current_login_at = Column(DateTime)
last_login_ip = Column(String(64))
current_login_ip = Column(String(64))
login_count = Column(Integer)
def __repr__(self):
return '<User %r>' % (self.name)
フォームを受け入れるときに自分で datastore.activate_user() を実行する必要がありますか??