問(wèn)題再現(xiàn):
在Flask Web開(kāi)發(fā)過(guò)程中有問(wèn)題在所難免,關(guān)鍵是要找到解決問(wèn)題的方案。解決Flask Web(next)問(wèn)題1. 創(chuàng)建登陸表單首先,我們需要?jiǎng)?chuàng)建一個(gè)登陸表單來(lái)處理用戶(hù)輸入的郵箱和密碼信息。在表單的
在Flask Web開(kāi)發(fā)過(guò)程中有問(wèn)題在所難免,關(guān)鍵是要找到解決問(wèn)題的方案。
解決Flask Web(next)問(wèn)題
1. 創(chuàng)建登陸表單
首先,我們需要?jiǎng)?chuàng)建一個(gè)登陸表單來(lái)處理用戶(hù)輸入的郵箱和密碼信息。在表單的action屬性中指定路由為"auth.login",并設(shè)置方法為POST。
2. 在User模型中添加生成token及驗(yàn)證token的方法
為了實(shí)現(xiàn)自動(dòng)確認(rèn)郵箱的功能,我們需要在User模型中添加生成token和驗(yàn)證token的方法。通過(guò)使用itsdangerous庫(kù)的TimedJSONWebSignatureSerializer來(lái)生成加密的token,并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。
3. 在登陸路由上的配置
在登陸路由"auth.login"中,我們需要對(duì)用戶(hù)提交的表單數(shù)據(jù)進(jìn)行驗(yàn)證。如果驗(yàn)證成功,則跳轉(zhuǎn)到原始頁(yè)面或者首頁(yè);否則,跳轉(zhuǎn)到首頁(yè)。
4. 在驗(yàn)證令牌路由上的配置
在驗(yàn)證令牌的路由中,我們需要檢查當(dāng)前用戶(hù)是否已經(jīng)確認(rèn)郵箱。如果已經(jīng)確認(rèn),則顯示提示消息并跳轉(zhuǎn)到首頁(yè);否則,檢查令牌是否有效,并根據(jù)結(jié)果顯示相應(yīng)的提示消息。
問(wèn)題分析:
按照以上步驟設(shè)置,令牌生成及發(fā)送功能已沒(méi)有問(wèn)題,唯獨(dú)在令牌驗(yàn)證上出現(xiàn)了問(wèn)題。主要問(wèn)題在于在登陸頁(yè)面跳轉(zhuǎn)時(shí),("next")總是返回None,這就使得用戶(hù)登陸后無(wú)法實(shí)現(xiàn)自動(dòng)確認(rèn)郵箱的功能。
解決方案:
1. 問(wèn)題是如何引起的:
當(dāng)用戶(hù)提交表單后,表單的action屬性定義了處理表單數(shù)據(jù)的路由"auth.login",所以每次提交數(shù)據(jù)都將跳轉(zhuǎn)到該鏈接。然而,該鏈接中沒(méi)有"next"這個(gè)參數(shù),這就是為什么("next")總是返回None的原因。
2. 解決問(wèn)題的方案:
修改登陸表單中的action屬性,去掉或者改為空,即action""。這樣修改后,郵箱驗(yàn)證的功能就正常了。