在会话中使用flask auth.verify_password

时间:2019-02-07 20:11:31

标签: flask-session flask-httpauth

我正在努力使身份验证正常工作。我通过api而不是Web应用程序控制登录行为。 为此,我正在使用flask sessionHTTPBasicAuth()。 用户登录后直到他注销,我不希望他重新登录(或向api发送每个请求的auth)。为此,我正在利用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']似乎不存在。它每次都要经过登录方法,而我的目标是跳过登录,直到用户注销为止。赞赏这里的任何建议。

0 个答案:

没有答案