使用HTTPBasicAuth重定向到一個登錄頁面的正確方法是什么?到目前為止,它總是把我帶到verify_password函式,并顯示一個要求輸入用戶名和密碼的彈出視窗。相反,我希望它能重定向到一個登錄頁面,然后記住用戶已經通過該登錄頁面認證成功。官方的HTTPBasicAuth頁面并沒有解釋這個問題。
這是我目前的代碼:
#!flask/bin/python。
from flask import Flask, jsonify, abort, request, make_response, url_for
from Flask import render_template
from flask_httpauth import HTTPBasicAuth
#Attribution: https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
#reference: https://github.com/realpython/discover-flask
#Needs: pip install flask-httpauth
app = Flask(__name__)
auth = HTTPBasicAuth()
@app.route('/', methods=['GET','POST'))
@auth.login_required)
def login()。
print('in login'/span>)
print(request.values.get('email'), request.values.get('password')
templateToReturn = 'login.html')
if request.method == 'POST':
print('in post')
username = request.values.get('email')
password = request.values.get('password')
if verify_password(username, password)。
print('password verified')
templateToReturn = 'index.html'/span>
print('Curr user', auth.current_user() )
print('request: ', request.method)
if request.method == 'GET' and auth.current_user() 。
templateToReturn ='index.html'
return render_template(templateToReturn)
@auth.verify_password
def verify_password(email, password)。
print('in verify pwd')
return verifyAuthentication(email, password)
def verifyAuthentication(email, password)。
knownUsers = {'[email protected]'/span>: 'pass'。
'[email protected]': 'pass'}。
authenticated = False: 'pass'}。
if email in knownUsers:
if knownUsers[email] == password:
authenticated = True[/span]。
return authenticated
@app.route('/logout'))
def logout()。
return render_template('logout.html'/span>)
@auth.error_handler[/span]。
def unauthorized()。
return '<!DOCTYPE html><html><body><div style="text-align: center;">Unauthorized access</div></body></html> '
@app.errorhandler(400)
def bad_request(error)。
return '<!DOCTYPE html><html><body><div style="text-align: center;"> Bad request</div></body> </html> '/span>
@app.errorhandler(404)。
def not_found(error)。
return '<!DOCTYPE html><html><body><div style="text-align: center;">Page not found</div></body></html> '
if __name__ == '__main__'/span>:
app.run(debug=True, host="0.0.0.0" )
和login.html的登錄形式:
<form action="{ url_for('/') }}" method="POST" >
<div class="row">
<div class="input-field col s12">
< built_in">type="email" class="validate">
<標簽 for="email"> Email</label>
</div>
</div>
<div class="row">
<div class="input-field col s12"/span>>
< built_in">type="password" class="validate">
<標簽 for="password"> Password</label>
</div>
</div>
< 按鈕 type="submit" id="login""login" class="wave-effect waves-light btn blue darken-1" style="width: 100%;">登錄</button>。
<br>
</form>
uj5u.com熱心網友回復:
根據HTTPBasicAuth的作者的回復:
該庫實作了HTTP標準中的一些演算法,最重要的是HTTP基本認證協議。 最重要的是HTTP Basic Authentication協議。這并不是一個 這不是一個用于創建登錄表單的庫,而且通常你甚至不會使用如果您想為一個使用 HTML 的應用程式創建登錄體驗,我建議您查看一下 如果您想為使用 HTML 的應用程式創建登錄體驗,我建議您查看 Flask-Login 擴展,它更適合您的用例。 它更適合您的使用情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/315493.html
標籤:

