2

私は5月のアプリでフラスコログインを使用しようとしています:

私のコントローラー:

@app.route("/process_log", methods=['POST'])
def process_login():
    filled_form = LoginForm(request.form)
    if filled_form.validate():
        phone = filled_form.phone.data
        password = filled_form.password.data
        if User.phone_exists(phone) and User.pass_match(phone, password):
            user = User.get_by_phone(phone)
            login_user(user.get_id)
            return redirect(url_for("index"))
        else:
            return render_template("login.html", form = filled_form, error = u"Не верный логин или пароль")
    else:
        return render_template("home.html", form = filled_form)

そして、フラスコログインのAPIに必要な関数が定義されたクラスがいくつかあります

私のユーザークラス:

from pymongo import MongoClient
from bson.objectid import ObjectId


class User():
    client = MongoClient()
    db = client['test']
    col = db['user']
    user_id = None

    def __init__(self, dic):
        self.dic = dic

    def is_authenticated():
        return True

    def is_anonymous():
        return False

    def is_active():
        return True

    def get_id(self):
        return unicode(str(self.user_id))

    def save(self):
        self.user_id = self.col.insert(self.dic)
        print "Debug:" + str(self.user_id)


    @staticmethod
    def _get_col():
        client = MongoClient()
        db = client['test']
        col = db['user']
        return col

    @staticmethod
    def phone_exists(phone):
        col = User._get_col()
        if col.find_one({'phone': phone}) != None:
            return True
        else:
            return False

    @staticmethod
    def pass_match(phone, password):
        col = User._get_col()
        if col.find_one({'phone': phone})['password'] == password:
            return True
        else:
            return False

    @staticmethod
    def get(userid):
        col = User._get_col()
        return col.find_one({'_id':userid})

    @staticmethod
    def get_by_phone(phone):
        col = User._get_col()
        dic = col.find_one({'phone': phone})
        print dic['password']
        return User(dic)

ご覧のとおり、関数 is_active が定義されています(注:私も自分自身で参照を渡そうとしました)

しかし、私はまだこのエラーAttributeError: 'function' object has no attribute 'is_active' を持っています

ここでコードが多すぎて申し訳ありませんが、かなり簡単なはずです。

注: 私は自分のプロジェクトに mongodb を使用しています。

エラーを見つけるのを手伝ってください。ありがとうございます

もう 1 つ: login_user(....) に Id またはユーザー オブジェクトを指定する必要がありますか?

4

1 に答える 1

4

login_user Userインスタンスに送信する必要があります ( ではありませんid) 。 https://github.com/maxcountryman/flask-login/blob/master/flask_login.py#L576を参照してください。

したがって、次のコードが機能する必要があります。

user = User.get_by_phone(phone)
login_user(user)
于 2013-08-21T04:40:47.033 に答える