如何在没有数据库且没有表单的情况下进行简单登录

时间:2014-08-17 23:41:25

标签: python security flask flask-login

我想添加一个简单的登录功能,可以登录或不登录(不需要存储用户特定的数据)。

我做了一个User类:

class User(object):
def __init__(self, username, hash):
    self.name = username
    self.hash = hash

我从INI文件中加载了一个用户列表。

我实现了user_loader函数

@self.login_manager.user_loader
    def load_user(userid):
        for user in self.users:
            if user.name == userid
                return user
        return None

登录方法有什么用?

@self.server.route("api/login", methods=["GET", "POST"])
        def login():

我想使用ajax请求进行登录,其中我发送凭据并获取包含用户名或错误消息的JSON响应。

1 个答案:

答案 0 :(得分:2)

简单示例,适用于POST /api/login username=TEST_USER&hash=TEST_HASH数据或GET /api/login?username=TEST_USER&hash=TEST_HASH

class User(UserMixin):

    def __init__(self, username, hash):
        self.name = username
        self.hash = hash

    @property
    def id(self):
        return self.name


@self.server.route('/api/login', methods=['GET', 'POST'])
def login():
    user = load_user(request.values.get('username'))
    if user and user.hash == request.values.get('hash'):
        login_user(user)
        return jsonify(status='ok', username=user.username)
    else:
        return jsonify(status='error', message='wrong username or hash')

但是我更喜欢POST http方法登录。

实际上,您自己的实现将取决于您的js调用,例如,您可以使用request.get_json代替POST request.form或GET request.args。和登录算法(凭证字段)。

同样load_user可能会因大量users而变慢。