Создание функции входа пользователя для базы данных в SQL с использованием Python, pgdb, PostgreSQL - PullRequest
0 голосов
/ 22 марта 2012

У меня есть база данных SQL, к которой я обращаюсь, используя Python и pgdb. Я планирую открыть доступ для группы пользователей, поэтому я хотел бы включить функцию входа в систему, которая принимает имя пользователя и пароль, которые сверяются с информацией базы данных о пользователе. Я не так часто использую Python, так что это заняло у меня значительное количество времени с небольшими результатами. Я нашел полезные темы по этому вопросу, используя PHP, но, к сожалению, не в Python, поэтому я решил начать эту тему.

Ниже мой код. По сути, я хотел бы функцию входа в систему, которая возвращает истину, если пользователь существует с заданным паролем. Код ниже не отвечает.

Я неправильно настраиваю .execute со ссылками на параметры? Или утверждение if неверно?

def Login(username,password):

    cursor.execute('select %s from db') % username
    dbuser = cursor.fetchone()
    if dbuser == username:
        cursor.execute('select %s from db') % password
        dbpass = cursor.fetchone()
        if dbpass == password:
            return "True"
       else:
            return "Password is incorrect."

   else:
       return "Username is incorrect."

Любая помощь очень ценится! Извините за новый вопрос ...

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Вы пытаетесь выбрать COLUMN из базы данных, что равно переменной username, переданной функции Login.

Ваш синтаксис совершенно неверен.

Чтение this Ссылка PostgreSQL на SQL Выберите правильный синтаксис.

По сути, вам нужно выбрать полный столбец (по имени столбца) в вашей базе данныхи добавьте предложение WHERE, которое использует или соответствует переменной username

cursor.execute('SELECT username,password FROM db WHERE username=%s') % (username)

Отказ от ответственности: Выше приведен небезопасный код для предотвращения внедрения SQL,Он показан только для того, чтобы помочь вам понять правильный синтаксис для использования вместо того, что задал текущий вопрос.

1 голос
/ 22 марта 2012

Три вещи ...

Во-первых, используемый вами SQL не имеет никакого смысла.Основной синтаксис select columns from table where stuff is true.Вы пытаетесь select <a username> from table, где имя пользователя должно быть именем столбца, которое не имеет никакого смысла.Я предполагаю, что вы пытались сделать что-то более похожее на select username from db where password=%s

Во-вторых, сообщение пользователю о том, что имя пользователя не существует, позволяет кому-то создать список всех действительных имен пользователей методом проб и ошибок.Вместо этого, скажите им в общем, что учетные данные не совпадают и не сообщайте им, какая часть повреждена.

В-третьих, вы встраиваете свой пользовательский ввод (вводятся имя пользователя и пароли)прямо в ваш SQL.Пожалуйста, прочитайте SQL-инъекцию и используйте вместо этого параметризованные запросы, чтобы пользователи не могли делать очень плохие вещи с вашим сайтом.

Редактировать

Последнее замечание.Все это означает, что вы храните пароли в виде простого текста в вашей таблице.Также изучите хеширование паролей.

...