我創建了這個表格:
<html>
<body>
<div>
<form action="{{ url_for('login') }}" method="POST">
<div class="row">
<div>
< built_in">type="email" class="validate">
<標簽 for="email"> Email</label>
</div>
</div>
<div class="row">
<div>
< input id="password" type="password""password" name="password" class="validate">
<標簽 for="password"> Password</label>
</div>
</div>
<按鈕 型別="提交" id="登錄" > Login</button>
<br>
</form>
<div>
</body>
</html>
我有這樣一個Flask應用,它使用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
#Needs: pip install flask-httpauth[/span
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)
@app.route('/logout'))
def logout() 。
return render_template('logout.html'/span>)
@auth.verify_password[/span]。
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
當我點擊表單的submit按鈕時,我被帶到了login()函式。但是不是應該有一些方法讓它進入verify_password()函式,因為它是用@auth.verify_password裝飾的嗎?
用戶認證到底是如何以及在代碼的哪一部分被Flask注冊的?我的意思是。@auth.login_required裝飾器何時真正允許其相應的裝飾函式被執行?
即使是HTTPBasicAuth()的官方頁面也沒有用一個HTML例子來解釋這個。誰能通過添加到我的代碼中來解釋一下。
uj5u.com熱心網友回復:
你忘了在你的HTML輸入標簽中添加name屬性,所以理想情況下應該是-
< input id="email" name="email" type type="email" class="validate" />
< built_in">type="password" class="validate" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315494.html
標籤:
上一篇:一個方法回傳的指標沒有被正確分配給C語言中定義的另一個指標
下一篇:自定義登錄屬性Laravel8
