Bir portfolio projesi üzerinde çalışıyorum. Bugün aldığım hatayı anlayamıyorum.
Örneğin sitede Company ve Worker Üyelik var.
Şirket ve Normal tip üyeliklerin kayıtlarında , database kısmında problem yok.
Sorunum şu:
A şirket parolası 123456 olsun.
Daha sonra bir Worker oluşturduğumda şifre 123456 olursa, login yaparken Worker Email & Password giriyorum, otomatik olarak A şirketinin profili renderlanıyor.Bu da kabul edilemez bir güvenlik açığı tabii ki.
Yani current_user .is_authenticated Company olarak renderlanıyor.
Bir türlü çözüm bulamadım. Farklı kodlar yazdım ancak işin içinden çıkamıyorum.
Yardımcı olabilir misiniz?
Bu üyelik modellerimi şu şekilde tanımladım:
class Company(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
company_name = db.Column(db.String(100), nullable=False)
company_detail = db.Column(db.Text, nullable=True)
company_photo = db.Column(db.String(255), default='default.jpg')
company_email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
# Establishing a one-to-many relationship with JobListing
joblistings = db.relationship('JobListing', backref='company', lazy=True)
def __repr__(self):
return f"Company('{self.company_name}', '{self.company_email}' , '{self.company_detail}' , '{self.password}')"
class JobListing(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=True)
job_type = db.Column(db.String(50), nullable=True,default="Full Time")
location = db.Column(db.String(100), nullable=True)
posted_time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
# Establishing a many-to-one relationship with Company
company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False)
def __repr__(self):
return f"JobListing('{self.title}', '{self.location}', '{self.posted_time}')"
class Worker(db.Model , UserMixin):
id = db.Column(db.Integer, primary_key=True)
worker_fullname=db.Column(db.String(60),nullable=False,default="Anonim")
worker_email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
profile_photo = db.Column(db.String(255))
about = db.Column(db.Text)
def __repr__(self):
return f"Worker('{self.worker_fullname}','{self.worker_email}' , '{self.password}')"Login Routing şu şekilde:@user.route("/login" , methods=['GET', 'POST'])
def login():
form = LoginForm()
if current_user.is_authenticated:
return redirect(url_for('main.home'))
if form.validate_on_submit():
company_user = Company.query.filter_by(company_email=form.email.data).first()
if company_user is None:
user = Worker.query.filter_by(worker_email=form.email.data).first()
else:
user = company_user
if user and bcrypt.check_password_hash(user.password, form.password.data):
login_user(user)
flash('Login successful!', 'success')
print(user)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('main.home'))
else:
flash('Login Unsuccessful. Please check username and password', 'danger')
print(user)
return render_template('login.html', title="Login", form=form)