今天給大家獻(xiàn)上登錄注冊接口開發(fā),是基于token驗(yàn)證的。咱們閑言少敘,進(jìn)入正題!
首先看一下數(shù)據(jù)庫模型:
#pip install passlib from passlib.apps import custom_app_context as pwd_context class Shop_list(db.Model): __tablename__ = "shop_list" userName = db.Column(db.BigInteger,primary_key = True) #手機(jī)號(hào) passWord = db.Column(db.Text,nullable=False) def hash_password(self, password): #給密碼加密方法 self.passWord = pwd_context.encrypt(password) def verify_password(self, password): #驗(yàn)證密碼方法 return pwd_context.verify(password, self.passWord)
?結(jié)構(gòu)非常簡單,給大家做個(gè)demo,下面的兩個(gè)方法是加密和驗(yàn)證密碼的,記住就行
接下來看一下注冊接口:
@app.route("/api/v1/admin/register",methods=["POST"]) def register(): username = request.form.get("username") password = request.form.get("password") save = Shop_list(userName=username) save.hash_password(password) #調(diào)用密碼加密方法 db.session.add(save) db.session.commit() return "success"
這個(gè)也沒啥可解釋的,先介紹數(shù)據(jù)在保存就完事了
?接下來是登錄接口
@app.route("/api/v1/admin/login",methods=["POST"]) def login(): username = request.form.get("username") password = request.form.get("password") obj = Shop_list.query.filter_by(userName=username).first() if not obj: return res_json(201,"","未找到該用戶") if obj.verify_password(password): token = generate_token(username) return res_json(200,{"token":token},"登錄成功") else: return res_json(201,"","密碼錯(cuò)誤")
解釋:res_json是我封裝的返回json數(shù)據(jù)的函數(shù) ,generate_token是生成token的函數(shù)
重頭戲:token的生成與驗(yàn)證方法
import time import base64 import hmac #生成token 入?yún)ⅲ河脩鬷d def generate_token(key, expire=3600): ts_str = str(time.time() + expire) ts_byte = ts_str.encode("utf-8") sha1_tshexstr = hmac.new(key.encode("utf-8"),ts_byte,"sha1").hexdigest() token = ts_str+":"+sha1_tshexstr b64_token = base64.urlsafe_b64encode(token.encode("utf-8")) return b64_token.decode("utf-8") #驗(yàn)證token 入?yún)ⅲ河脩鬷d 和 token def certify_token(key, token): token_str = base64.urlsafe_b64decode(token).decode("utf-8") token_list = token_str.split(":") if len(token_list) != 2: return False ts_str = token_list[0] if float(ts_str) < time.time(): # token expired return False known_sha1_tsstr = token_list[1] sha1 = hmac.new(key.encode("utf-8"),ts_str.encode("utf-8"),"sha1") calc_sha1_tsstr = sha1.hexdigest() if calc_sha1_tsstr != known_sha1_tsstr: # token certification failed return False # token certification success return True
就是這么簡單,你學(xué)會(huì)了嗎?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42706.html
摘要:如果一旦加密算法泄露了,攻擊者可以在本地建立一個(gè)實(shí)現(xiàn)了登錄接口的假冒父應(yīng)用,通過綁定來把子應(yīng)用發(fā)起的請(qǐng)求指向本地的假冒父應(yīng)用,并作出回應(yīng)。 1.什么是單點(diǎn)登錄? 單點(diǎn)登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)??蛻舳顺钟蠭D,服務(wù)端持有session...
摘要:這樣,讓用戶可以授權(quán)第三方網(wǎng)站訪問他們存儲(chǔ)在另外服務(wù)提供者的某些特定信息,而非所有內(nèi)容。 不久之前 Dearmadman 曾寫過一篇 使用 Laravel Socialite 集成微信登錄 的文章,但是似乎還是有些同學(xué)不太明白,詢問著如何集成 QQ 登錄,那么,本篇我們就來剖析一下 Laravel Socialite 的詳細(xì)內(nèi)容。讓各位同學(xué)都獲得 Laravel Socialite 所...
摘要:本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。若確認(rèn)此次請(qǐng)求來自微信服務(wù)器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 一、簡介 關(guān)于微信公眾號(hào)的介紹就省略了,自行搜索。注冊過程也不說了。我們會(huì)直接注冊測試號(hào)來實(shí)現(xiàn)代碼。這將會(huì)是個(gè)全面講解微信公眾號(hào)開發(fā)的系列教程。本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。在開始之前最好去看看開發(fā)者文檔微信公眾平臺(tái)技術(shù)文...
摘要:收到驗(yàn)證碼后使用驗(yàn)證碼登錄注冊。其中,是設(shè)備和命名的。是登錄前的安全驗(yàn)證機(jī)制,登錄完刪除。在用戶未收到短信的情況下,再次調(diào)用此函數(shù)發(fā)起電話回呼通知驗(yàn)證碼。完成認(rèn)證請(qǐng)求響應(yīng)。響應(yīng)認(rèn)證成功后返回信息。結(jié)束認(rèn)證會(huì)話注銷單個(gè)會(huì)話。 1.API認(rèn)證接口定義 認(rèn)證目前只支持一種方式:短信或電話回呼。(譯注:此處不準(zhǔn)確,起碼還要郵箱等其他方式。)認(rèn)證步驟: 調(diào)用RequestAuthCode請(qǐng)求驗(yàn)...
摘要:有兩種方法,一種是在開發(fā)環(huán)境中設(shè)置通過的,另一種是在服務(wù)器上修改的配置設(shè)置。這樣我們以后使用訪問接口就可以不加了,打包后訪問也不用手動(dòng)去除統(tǒng)一管理在項(xiàng)目開發(fā)過程中,會(huì)涉及到很多接口的處理,當(dāng)項(xiàng)目足夠大時(shí),就需要統(tǒng)一管理接口。 這篇文章總結(jié)了vue項(xiàng)目的所遇到的問題,包括跨域、用戶認(rèn)證、接口統(tǒng)一管理、路由配置、兼容性處理,性能優(yōu)化等內(nèi)容。 項(xiàng)目github地址 : 前端 https:...
閱讀 695·2021-11-18 10:07
閱讀 2886·2021-09-22 16:04
閱讀 888·2021-08-16 10:50
閱讀 3360·2019-08-30 15:56
閱讀 1793·2019-08-29 13:22
閱讀 2700·2019-08-26 17:15
閱讀 1247·2019-08-26 10:57
閱讀 1116·2019-08-23 15:23