2016-10-12 40 views
1

私はちょうどFlask-Loginの開発コードで基本ログインモデルを設定しようとしています。Flask-Login - 成功したログイン後にユーザーが匿名に戻り、リダイレクト

私のユーザーが正常にログインして、私はredirect(url_for('index'))を発行した後、ユーザーがflask_login.AnonymousUserMixin.

値に彼の認証とリターンを失い、私はいくつかの簡単な回避策があります実現が、私は私のコードは、「doesnの理由を理解しようとしています例のように動作します。

Flask-Loginの単純なことや理解が不足しています。リダイレクト後にユーザーはどのようにログインしたままにできますか?

__init__.py 
... 
login_manager = LoginManager() 
login_manager.init_app(app) 
login_manager.login_view = "login" 
... 
models.py 
class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    uid = db.Column(db.Integer, primary_key=True) 
    firstname = db.Column(db.String(100)) 
    lastname = db.Column(db.String(100)) 
    username = db.Column(db.String(100), unique=True) 
    email = db.Column(db.String(120), unique=True) 
    pwdhash = db.Column(db.String(54)) 

    def __init__(self, firstname, lastname, email, username, password): 
    ... self ... = .... 
    def get_id(self): 
     return(self.username) 
    def __repr__(self): 
     return '<User is:%r>' % (self.username)   
routes.py 
@login_manager.user_loader 
def load_user(user_id): 
    try: 
     return User.query.get(user_id) 
    except: 
     return None 

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    form = LoginForm() 
    if request.method == "POST": 
     if form.validate(): 
      user = User.query.filter_by(username=form.username.data.lower()).first() 
      login_user(user, remember=False) 
      assert current_user.is_authenticated 
      return redirect(url_for('index')) 
     else: 
      return render_template('login.html', form=form) 
    return render_template('login.html', form=form) 

@app.route('/index') 
@login_required 
def index(): 
    return render_template("home.html") 

私はflask-login user is set to anonymous after loginを確認しましたが、そのログイン方法は上記とは異なります。

答えて

0

これらの機能をUserクラスに追加します。

def is_authenticated(self): 
    return True 

def is_active(self): 
    return self.active 

def is_anonymous(self): 
    return False 

私の記憶が正しければ、Flask-LoginはあなたのUserクラスでそれらを必要とします。

self.activeは、ブール型フィールドです。特に、ユーザーがアクティブであるかどうかをFlask-Loginに伝えます。 active = db.Column(db.Boolean, nullable=False)を使用して宣言できます。

+0

「User(UserMixin、db.Model):」というクラスのUserMixinには、これらの機能が含まれています。しかし、これらの関数をUserMixinを使って挿入したところ、同じ結果が得られました。 self.active'でドキュメントを見つけることができません。何の効果もないようです - – bobgott

0

まあ、私は私がキャッチしている必要があり、ダムの監督上の自分の質問に答える必要があり

私は

悪いラインを交換するために必要なdef load_user(user_id):

簡単な修正(ぼんやりした目を?):return User.query.get(user_id)

グッド:return User.query.filter_by(username=user_id).first()

私は持ち帰りがセッションの整合性を維持する中def load_user()の重要性であると仮定します。

関連する問題