Home > Software design >  Authentication in Flask application using dictionary database structure
Authentication in Flask application using dictionary database structure

Time:11-19

I am creating a basic application to demonstrate the register and login activities in Flask using sessions. For the below code, each user available in the dictionary should be able to login. However, the application only accepts the login for the first user named 'Mary'. I don't understand where did it went wrong.

from flask import Flask, app, session, render_template, request,redirect, url_for, jsonify
app = Flask(__name__)
app.config['SECRET_KEY'] = "Zd9TUg1aE03bHc28"

@app.route('/')
def load():
    return render_template("authusers.html")  

class Mydatabase:
 appdb=[{'username':'Mary','password':'Password@123'},
        {'username':'John','password':'Password@456'},
        {'username':'Tara','password':'Password@789'}]

mydbusers=Mydatabase()

@app.route('/login',methods = ['GET','POST'])  
def success():  
    if request.method == "POST":  
        username_val = request.form['user_id'] 
        userpassword_val = request.form['user_password'] 
        for authuser in Mydatabase.appdb:
            for authpassword in authuser.values():
                if authuser['username'] == username_val and authpassword['password'] == userpassword_val:
                 session['reg_user'] = username_val
                 return f'{session.get("reg_user")} have successfully logged into the application';  
                else:
                 return redirect(url_for('register'))        

@app.route('/logout', methods=['GET','POST'])  
def logout():  
    if 'reg_user' in session:  
        session.pop('reg_user',None)    
        return render_template("authusers.html") 

@app.route('/register', methods=['GET','POST'])
def register():
    return render_template('register.html')

@app.route('/reg_success',methods=['GET','POST'])
def reg_success():
    newusercred={'username':request.form['user_id'], 'password':request.form['user_password']}
    mydbusers.appdb.append(newusercred)
    # return jsonify(Mydatabase.appdb)
    return render_template("authusers.html")
     
        
if __name__=="__main__":
 app.run(debug=True)

CodePudding user response:

I see some logical issue in your code

Try like this ->

class Mydatabase:
 appdb=[{'username':'Mary','password':'Password@123'},
        {'username':'John','password':'Password@456'},
        {'username':'Tara','password':'Password@789'}]

username_val = 'Tara'
userpassword_val = 'Password@789'

d = [a for a in Mydatabase.appdb if a["username"] == username_val and a["password"]==userpassword_val]
if d:
    print(f'have successfully logged into the application')
else:
    print(f'Wrong credentials')

There are some unwanted loops in your code, and you do return even in the else of part.

  • Related