成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

干貨!flask登錄注冊token驗(yàn)證接口開發(fā)詳解

yimo / 1490人閱讀

今天給大家獻(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

相關(guān)文章

  • Python Flask單點(diǎn)登錄問題

    摘要:如果一旦加密算法泄露了,攻擊者可以在本地建立一個(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...

    tuomao 評(píng)論0 收藏0
  • Laravel Socialite 詳解

    摘要:這樣,讓用戶可以授權(quán)第三方網(wǎng)站訪問他們存儲(chǔ)在另外服務(wù)提供者的某些特定信息,而非所有內(nèi)容。 不久之前 Dearmadman 曾寫過一篇 使用 Laravel Socialite 集成微信登錄 的文章,但是似乎還是有些同學(xué)不太明白,詢問著如何集成 QQ 登錄,那么,本篇我們就來剖析一下 Laravel Socialite 的詳細(xì)內(nèi)容。讓各位同學(xué)都獲得 Laravel Socialite 所...

    yuanxin 評(píng)論0 收藏0
  • Koa2微信公眾號(hào)開發(fā)(一) 本地開發(fā)調(diào)試環(huán)境搭建

    摘要:本篇是該系列的第一篇,本地開發(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ù)文...

    snifes 評(píng)論0 收藏0
  • actor im 中 多種登錄機(jī)制的設(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)...

    Jacendfeng 評(píng)論0 收藏0
  • vue開發(fā)項(xiàng)目完全指南

    摘要:有兩種方法,一種是在開發(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:...

    leoperfect 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<