sean
sean

Reputation: 61

Can't compare input variables to those from a file

I am making a login system for my project, and I have the usernames and passwords stored in a text file, with usernames in the first column and passwords in the second column, and then separating each login/password with a new line and using : as a barrier between the username/password.

Upon entering the correct username and password, I always get incorrect login, however if I only compare the username to the file it functions properly. Even if I print the password and username straight from the file and then print it next to the username/password I entered, it is still the exact same yet still say incorrect login!

def login():
file=open("user.txt","r")
user=input("enter usename")
password=input("enter password") 
Check=False
for line in file:
    correct=line.split(":")
    if user==correct[0] and password==correct[1]:
        Check=True
        break
if Check==True:
    print("succesffuly logged in")
    file.close()
    mainMenu()
else:
    print("incorrect log in")
    file.close()
    login()

Upvotes: 5

Views: 208

Answers (2)

innicoder
innicoder

Reputation: 2688

We can just check using in

def login():
    file = open("user.txt", "r")
    user = input("enter usename ")
    password = input("enter password ")
    if ('{0}:{1}'.format(user, password)) in file:
        print('yay') 
    else:
        print('Boo !! User not found')

login()

if you wanted to use the for loop I would suggest:

def login():
    file = open("user.txt", "r")
    user = input("enter usename ")
    password = input("enter password ")
    for line in file:
        temp_user, temp_password = line.strip().split(':')
        if temp_user == user and temp_password == password.strip():
            print('yay')
        else:
            print('boo username and password not found!')


login()

Really important, WARNING! Please take necessary security measurements as this code does not provide any, there are a lot of vulnerabilities that could be exploited. No hashing function and Python itself does not provide a lot of security, I would suggest using getpass.getpass explanation HERE

Upvotes: 2

Drise
Drise

Reputation: 4388

I suspect you have a \n at the end of each user / password string. I suspect line looks like user:pass\n after being read in. Use line.strip().split(':') to remove the newline, which is causing password==correct[1] to fail.

Replace:

for line in file:
    correct=line.split(":")

With:

for line in file:
    correct=line.strip().split(":")

For why, see https://docs.python.org/2/library/string.html#string.strip

string.strip(s[, chars])

Return a copy of the string with leading and trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the both ends of the string this method is called on.

Upvotes: 5

Related Questions