如何使用Flask登录?

2024-09-30 20:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Flask登录并尝试了解它是如何工作的。如果我对docs理解正确,我应该创建一个user类,它包含四个方法,分别是“authenticated”、“is”“active”、“is”“unonymous”和“get”id,我真的不知道之后该怎么做。有一个函数login\u user(user),我知道它会获取一个尚未经过身份验证的用户的实例并对其进行身份验证,但是当我的user类没有任何设置方法时,该如何工作呢?在

下面是一些代码:

class User:
    isAuth = False
    isActive = False
    isAnon = True
    id = unicode(0)

    def __init__(self, isAuth, isActive, isAnon, id):
        self.isAuth = isAuth
        self.isActive = isActive
        self.isAnon = isAnon
        self.id = id

    def is_authenticated(self):
        return isAuth

    def is_active(self):
        return isActive

    def is_anonymous(self):
        return isAnon

    def get_id(self):
        return id

下面是我应该如何使用authomatic和Flask Login对用户进行身份验证的猜测:

^{pr2}$

我错过了什么?在

编辑,这里是用户加载程序:

@lm.user_loader
def load_user(userid):
    return User.get(userid)

上面还有这个:

lm = LoginManager()
lm.init_app(app)

Tags: 方法用户self身份验证idflaskgetreturn
2条回答

我发现这很有帮助: https://www.openshift.com/blogs/use-flask-login-to-add-user-authentication-to-your-python-application

请记住不要在数据库中存储纯文本密码以进行用户身份验证。在

你还卡住吗?如果你需要我,我会在这里:)

定义用户模型时,必须实现这四种方法(Flask Login就是这样工作的)。但是,您不必自己定义它们,除非您需要一些自定义行为。Flask Login为您提供UserMixin类。您所要做的就是将您的用户模型子类化,UserMixin将为您提供具有默认行为的所有四个方法。例如:

from flask.ext.login import UserMixin

class User(UserMixin, Model):
    # your user model definition

在用户模型中,您可以覆盖这四种方法中的任何一种来满足您的需要。 此外,请参阅“您的用户类”部分的底部以获取进一步的参考: https://flask-login.readthedocs.org/en/latest/#your-user-class

要获取用户数据,应该使用窗体。按照你的说法,用户必须直接在URL中输入他/她的数据(我猜是/login?username=yourusername&password=youruserpassword),这是不安全的,通常被认为是一种不好的做法。在

相反,您应该使用表单让用户在其中输入他们的登录数据。WTForms和Flask WTF扩展为您提供了轻松创建表单的方法。例如:

^{pr2}$

供进一步参考: https://wtforms.readthedocs.org/en/latest/https://flask-wtf.readthedocs.org/en/latest/

之后,您的视图应该只捕获表单数据,检查数据库中是否存在具有提供数据的用户,以及提供的密码是否与数据库中存储的密码匹配。您的观点如下:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()

    # on POST check if the submitted form is valid
    if form.validate_on_submit():

        # get user from database
        user = User.query.filter_by(username=form.username.data).first()

        #check if the user exists and if he/she provided correct password
        if user is not None and user.password == form.password.data:

            # if everything checks out, call the login function
            login(user)

            # redirecting after form submission is also considered good practice
            redirect(url_for('somewhere'))

        # if user is not found or he/she provided wrong password, inform them
        flash('Invalid username and/or password') 

    # on GET, just render the template with login form
    return render_template('login.html', form=form)

顺便说一句,这个视图假设您以纯文本存储密码,这是一个坏主意,正如有人指出的那样。我这样做只是为了演示登录功能。在

另外,如果您想知道如何定义模型以及如何从数据库中查询数据,请参考Flask SQLAlchemyhttps://pythonhosted.org/Flask-SQLAlchemy/和SQLAlchemyhttp://www.sqlalchemy.org/

相关问题 更多 >