国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

干貨!flask登錄注冊token驗證接口開發詳解

yimo / 1477人閱讀

今天給大家獻上登錄注冊接口開發,是基于token驗證的。咱們閑言少敘,進入正題!

首先看一下數據庫模型:

#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) #手機號
    passWord = db.Column(db.Text,nullable=False)
    def hash_password(self, password): #給密碼加密方法
        self.passWord = pwd_context.encrypt(password)
 
    def verify_password(self, password): #驗證密碼方法
        return pwd_context.verify(password, self.passWord)

?結構非常簡單,給大家做個demo,下面的兩個方法是加密和驗證密碼的,記住就行

接下來看一下注冊接口:

@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) #調用密碼加密方法
    db.session.add(save)
    db.session.commit()
    return "success"

這個也沒啥可解釋的,先介紹數據在保存就完事了

?接下來是登錄接口

@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,"","密碼錯誤")

解釋:res_json是我封裝的返回json數據的函數 ,generate_token是生成token的函數

重頭戲:token的生成與驗證方法

import time
import base64
import hmac
#生成token 入參:用戶id

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")
#驗證token 入參:用戶id 和 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

就是這么簡單,你學會了嗎?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42706.html

相關文章

  • Python Flask單點登錄問題

    摘要:如果一旦加密算法泄露了,攻擊者可以在本地建立一個實現了登錄接口的假冒父應用,通過綁定來把子應用發起的請求指向本地的假冒父應用,并作出回應。 1.什么是單點登錄? 單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。客戶端持有ID,服務端持有session...

    tuomao 評論0 收藏0
  • Laravel Socialite 詳解

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

    yuanxin 評論0 收藏0
  • Koa2微信公眾號開發(一) 本地開發調試環境搭建

    摘要:本篇是該系列的第一篇,本地開發環境搭建以及接入微信。若確認此次請求來自微信服務器,原樣返回參數內容,則接入生效,成為開發者成功,否則接入失敗。 一、簡介 關于微信公眾號的介紹就省略了,自行搜索。注冊過程也不說了。我們會直接注冊測試號來實現代碼。這將會是個全面講解微信公眾號開發的系列教程。本篇是該系列的第一篇,本地開發環境搭建以及接入微信。在開始之前最好去看看開發者文檔微信公眾平臺技術文...

    snifes 評論0 收藏0
  • actor im 中 多種登錄機制的設定

    摘要:收到驗證碼后使用驗證碼登錄注冊。其中,是設備和命名的。是登錄前的安全驗證機制,登錄完刪除。在用戶未收到短信的情況下,再次調用此函數發起電話回呼通知驗證碼。完成認證請求響應。響應認證成功后返回信息。結束認證會話注銷單個會話。 1.API認證接口定義 認證目前只支持一種方式:短信或電話回呼。(譯注:此處不準確,起碼還要郵箱等其他方式。)認證步驟: 調用RequestAuthCode請求驗...

    Jacendfeng 評論0 收藏0
  • vue開發項目完全指南

    摘要:有兩種方法,一種是在開發環境中設置通過的,另一種是在服務器上修改的配置設置。這樣我們以后使用訪問接口就可以不加了,打包后訪問也不用手動去除統一管理在項目開發過程中,會涉及到很多接口的處理,當項目足夠大時,就需要統一管理接口。 這篇文章總結了vue項目的所遇到的問題,包括跨域、用戶認證、接口統一管理、路由配置、兼容性處理,性能優化等內容。 項目github地址 : 前端 https:...

    leoperfect 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<