Я немного изо всех сил пытаюсь заставить аутентификацию работать должным образом.Я контролирую поведение при входе через API вместо веб-приложения.Для этого я использую flask session
и HTTPBasicAuth()
.После того, как пользователь входит в систему и пока он не выходит из системы, я не хочу, чтобы он повторно входил в систему (или) отправлял аутентификацию для каждого запроса к API.Для этого я использую session['username']
.
Мой код для auth.verify_password
ниже.
@auth.verify_password
def verify_password(username, password):
if 'username' in session:
return True
else:
where_col = "username"
if '@' in parseaddr('username')[1]:
where_col = "email"
conn = mysql.connect()
cur = conn.cursor()
sql = "SELECT email, pwd FROM users_table WHERE {}=%s".format(where_col)
cur.execute(sql, (username))
row = cur.fetchone()
cur.close()
conn.close()
if not row:
print "Invalid user"
return False
session['username'] = username
return check_password_hash(row[1], password)
Now, after the login is complete, I want to get some other product data for which I will check using the `auth.login_required` decorator
@app.route('/products', methods=['GET', 'POST'])
@auth.login_requied
def get_products():
conn = mysql.connect()
cur = conn.cursor()
sql = "select * from all_products"
row = cur.fetchall()
cur.close()
conn.close()
return row
@app.route('/logout', methods=['GET', 'POST'])
@auth.login_requied
def logout():
session.pop(auth.username())
В следующий раз, когда я позвоню get_products
, я не хочу передаватьauth
к заголовку запроса.Приведенный выше код не работает, когда я это делаю.Я чувствую, что какой-то очень маленький код где-то отсутствует (или), что мой подход совершенно неверенsession['username']
, похоже, не сохраняется.Он должен проходить через подход входа каждый раз, тогда как моя цель - пропустить вход до тех пор, пока пользователь не выйдет из системы.Оцените любые предложения здесь.