国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flask框架-認(rèn)證權(quán)限(一):使用g對(duì)象存登錄用戶信息,認(rèn)證權(quán)限一起實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了flask框架-認(rèn)證權(quán)限(一):使用g對(duì)象存登錄用戶信息,認(rèn)證權(quán)限一起實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、項(xiàng)目結(jié)構(gòu)和基本的依賴包

apps

? ? ? ? -user

? ? ? ? __init__.py

authen

? ? ? ?__init__.py

? ? ? ? token.py

ext

? ? ? ? __init__.py

util.py

? ? ? ?public.py

? ? ? ? __init__.py

app.py

依賴包

alembic==1.8.1
click==7.1.2
Flask==1.1.4
Flask-Migrate==2.7.0
Flask-Script==2.0.6
Flask-SQLAlchemy==2.4.1
greenlet==2.0.1
importlib-metadata==5.0.0
importlib-resources==5.10.0
itsdangerous==1.1.0
Jinja2==2.11.3
Mako==1.2.4
MarkupSafe==2.0.1
PyMySQL==1.0.2
SQLAlchemy==1.3.0
typing_extensions==4.4.0
Werkzeug==1.0.1
zipp==3.10.0
Flask-RESTful==0.3.9
PyJWT==2.7.0
websocket-client==1.5.1
gevent==22.10.1
gevent-websocket==0.10.1
Flask-Caching==2.0.2
redis==4.5.5

二、配置token認(rèn)證和解析

authen/token.py

from flask import request,g
import jwt
import time
from flask import jsonify
from functools import wraps #類裝飾器
#導(dǎo)入用戶表:這個(gè)根據(jù)用戶自己來(lái)
from apps.user.models import UserModel


JWT_SECRET_KEY = '$#%^&&*(DFHJKUTYGHF112312' #加密的鹽
ALGORITHM = 'HS256' #加密算法

#生成token
def jwt_encode_token(user_id:int,time_out=7*24*60*60):
    payload = {
        'user_id': user_id,
        'iat': time.time(), #產(chǎn)生token時(shí)的時(shí)間戳
        'exp': time.time() + time_out #token過(guò)期時(shí)間戳
    }
    token = jwt.encode(payload, JWT_SECRET_KEY, algorithm=ALGORITHM)
    return token

#解析token
def jwt_decode_token(token):
    secret = JWT_SECRET_KEY
    payload = jwt.decode(token,secret,algorithms=ALGORITHM)
    return payload


#類裝飾器:需要認(rèn)證
def login_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        token = request.cookies.get('token', "none")
        if not token:
            token = request.headers.get('token', "none")
        try:
            payload = jwt_decode_token(token)
        except Exception as e:
            return jsonify({'code': 410, 'error': 'token有問(wèn)題'}),403
        user_id = payload.get('user_id')
        exp = payload.get('exp')
        now = time.time()
        obj = UserModel.query.filter_by(id=user_id).first()
        if not obj:
            return jsonify({'code': 410, 'error': 'token有問(wèn)題'}),403
        if exp < now:
            return jsonify({'code': 410, 'error': 'token已經(jīng)過(guò)期了'}),403
        g.user = obj
        #認(rèn)證通過(guò),執(zhí)行視圖函數(shù)
        return func(*args,**kwargs)
    return wrapper



def authen_admin_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if not hasattr(g,'user'):
            return jsonify({'code':410,'msg':'請(qǐng)先登錄'})
        if g.user.role != '管理員':
            return jsonify({'code': 410, 'msg': '沒(méi)有管理員權(quán)限,無(wú)法操作'}), 403
        # 認(rèn)證通過(guò),執(zhí)行視圖函數(shù)
        return func(*args, **kwargs)

    return wrapper

if __name__ == '__main__':
    token = jwt_encode_token(78)

三、視圖類使用

user/views.py

from flask.views import MethodView
from flask import jsonify
from flask import request,g
from ext import db


#模型類
from . import models
#認(rèn)證相關(guān)的 
from authen.token import jwt_encode_token,login_required,admin_required,authen_admin_required


class RoleView(MethodView):
    #所有視圖函數(shù)都需要登錄認(rèn)證
    decorators=[login_required]
    def get(self):
        objs = models.RoleModel.query.all()
        lis = []
        for obj in objs:
            lis.append({'id':obj.id,'name':obj.name})
        return jsonify({'code':200,'data':lis})
    #post請(qǐng)求需要有管理員權(quán)限
    @authen_admin_required
    def post(self):
        print(g.user)
        name = request.form.get('name')
        if not name:
            return jsonify({'code':400,'error':'請(qǐng)攜帶上權(quán)限名'})

        obj = models.RoleModel.query.filter_by(name=name).first()
        if obj:
            return jsonify({'code':400,'error':f'{name} 權(quán)限已經(jīng)存在了'})
        else:
            obj = models.RoleModel()
            obj.name=name
            db.session.add(obj)
            db.session.commit()
            return jsonify({'code':200,'msg':f'新增角色:{name} 成功'})

認(rèn)證大致的邏輯:

1、用戶登錄時(shí),生成token,前端保存token信息

2、前端發(fā)起請(qǐng)求時(shí),將token攜帶在cookies或請(qǐng)求頭中

3、后端拿到token,先解析出token的用戶信息,將用戶信息存到g對(duì)象中

4、認(rèn)證通過(guò)后,就可以在請(qǐng)求函數(shù)中通過(guò)g獲取到當(dāng)前登錄的用戶。

管理員權(quán)限認(rèn)證的邏輯:

1、依賴于登錄認(rèn)證的流程,

2、在進(jìn)入視圖函數(shù)前,先檢驗(yàn)是否通過(guò)登錄認(rèn)證了

3、登錄認(rèn)證通過(guò)了,就可以通過(guò)g獲取當(dāng)前登錄的用戶信息

4、再對(duì)登錄的用戶的信息進(jìn)行權(quán)限的判斷文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-487572.html

到了這里,關(guān)于flask框架-認(rèn)證權(quán)限(一):使用g對(duì)象存登錄用戶信息,認(rèn)證權(quán)限一起實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決:Python-Flask框架—通過(guò)flask_login模塊及Session模塊檢測(cè)是否有用戶登錄

    解決:Python-Flask框架—通過(guò)flask_login模塊及Session模塊檢測(cè)是否有用戶登錄

    目錄 一、簡(jiǎn)單示例 二、查看session信息 三、設(shè)置session過(guò)期時(shí)間 ? 要在Flask中檢測(cè)用戶是否登錄,可以使用以下方法: 在用戶登錄時(shí),將用戶的登錄狀態(tài)存儲(chǔ)在會(huì)話中。例如,使用 flask_login 庫(kù)進(jìn)行用戶認(rèn)證和登錄。 在需要檢查用戶是否登錄的視圖函數(shù)中,從會(huì)話中獲取用戶

    2024年02月22日
    瀏覽(21)
  • spring boot中常用的安全框架 Security框架 利用Security框架實(shí)現(xiàn)用戶登錄驗(yàn)證token和用戶授權(quán)(接口權(quán)限控制)

    spring boot中常用的安全框架 Security框架 利用Security框架實(shí)現(xiàn)用戶登錄驗(yàn)證token和用戶授權(quán)(接口權(quán)限控制)

    spring boot中常用的安全框架 Security 和 Shiro 框架 Security 兩大核心功能 認(rèn)證 和 授權(quán) 重量級(jí) Shiro 輕量級(jí)框架 不限于web 開(kāi)發(fā) 在不使用安全框架的時(shí)候 一般我們利用過(guò)濾器和 aop自己實(shí)現(xiàn) 權(quán)限驗(yàn)證 用戶登錄 Security 實(shí)現(xiàn)邏輯 輸入用戶名和密碼 提交 把提交用戶名和密碼封裝對(duì)象

    2024年02月06日
    瀏覽(31)
  • SSM+Shiro安全框架整合(完成安全認(rèn)證--登錄+權(quán)限授權(quán))+ssm整合shiro前后端分離

    SSM+Shiro安全框架整合(完成安全認(rèn)證--登錄+權(quán)限授權(quán))+ssm整合shiro前后端分離

    目錄 1.搭建SSM框架 ?1.1.引入相關(guān)的依賴 1.2.?spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并啟動(dòng) 2.ssm整合shiro---認(rèn)證功能 ?(1).引入依賴 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登錄頁(yè)面) (5).新建success.jsp(登錄成功后跳轉(zhuǎn)到此) (6).創(chuàng)建User實(shí)體類 (7).創(chuàng)建LoginVo

    2024年02月15日
    瀏覽(27)
  • Flask 使用Flask的session來(lái)保存用戶登錄狀態(tài)例子

    Flask 使用Flask的session來(lái)保存用戶登錄狀態(tài)例子

    使用Python的Flask庫(kù)實(shí)現(xiàn)的登錄接口、查詢金額接口和注銷接口的示例。 當(dāng)用戶發(fā)送POST請(qǐng)求到 /login 接口時(shí),代碼會(huì)獲取請(qǐng)求中的用戶名和密碼。如果用戶名和密碼匹配(在示例中是\\\'admin\\\'和\\\'admin123\\\'),則會(huì)將用戶名保存在session中,并將session設(shè)置為永久有效。這意味著用戶在

    2024年02月16日
    瀏覽(23)
  • Spring項(xiàng)目使用Redis限制用戶登錄失敗的次數(shù)以及暫時(shí)鎖定用戶登錄權(quán)限

    Spring項(xiàng)目使用Redis限制用戶登錄失敗的次數(shù)以及暫時(shí)鎖定用戶登錄權(quán)限

    前兩天被面試到這個(gè)問(wèn)題,最初回答的不是很合理,登錄次數(shù)這方面記錄還一直往數(shù)據(jù)庫(kù)上面想,后來(lái)感覺(jué)在數(shù)據(jù)庫(kù)中加一個(gè)登錄日志表,來(lái)查詢一段時(shí)間內(nèi)用戶登錄的次數(shù),現(xiàn)在看來(lái),自己還是太年輕了,做個(gè)登錄限制肯定是為了防止數(shù)據(jù)庫(kù)高并發(fā),加一個(gè)表來(lái)記錄登錄日

    2024年02月12日
    瀏覽(27)
  • MariaDB 使用 root 賬戶管理數(shù)據(jù)庫(kù)用戶權(quán)限和遠(yuǎn)程登錄權(quán)限設(shè)置

    MariaDB 使用 root 賬戶管理數(shù)據(jù)庫(kù)用戶權(quán)限和遠(yuǎn)程登錄權(quán)限設(shè)置 作為一種流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MariaDB 提供了豐富的功能和靈活的權(quán)限控制機(jī)制。在本文中,我們將學(xué)習(xí)如何使用 root 賬戶來(lái)創(chuàng)建新用戶,并為其分配特定的數(shù)據(jù)庫(kù)權(quán)限和遠(yuǎn)程登錄權(quán)限。 首先,我們需要使

    2024年01月23日
    瀏覽(34)
  • 快速實(shí)現(xiàn)用戶認(rèn)證:使用Python和Flask配合PyJWT生成與解密Token的教程及示例代碼

    這段代碼提供了一個(gè)使用 Python 和 Flask 結(jié)合 JWT (JSON Web Tokens) 進(jìn)行用戶認(rèn)證的簡(jiǎn)單框架。它包括了生成 token、解碼 token、檢查用戶狀態(tài)和一個(gè)裝飾器函數(shù),用于保護(hù)需要認(rèn)證的路由。下面是對(duì)代碼的逐部分解釋: 1. generate_token(user_id) 函數(shù) 這個(gè)函數(shù)用于為指定的用戶 ID 生成一

    2024年02月22日
    瀏覽(40)
  • Flask Session 登錄認(rèn)證模塊

    Flask Session 登錄認(rèn)證模塊

    Flask 框架提供了強(qiáng)大的 Session 模塊組件,為 Web 應(yīng)用實(shí)現(xiàn)用戶注冊(cè)與登錄系統(tǒng)提供了方便的機(jī)制。結(jié)合 Flask-WTF 表單組件,我們能夠輕松地設(shè)計(jì)出用戶友好且具備美觀界面的注冊(cè)和登錄頁(yè)面,使這一功能能夠直接應(yīng)用到我們的項(xiàng)目中。本文將深入探討如何通過(guò) Flask 和 Flask-WTF

    2024年02月05日
    瀏覽(14)
  • Django使用DRF + Simple JWT 完成小程序使用自定義用戶的注冊(cè)、登錄和認(rèn)證

    Django使用DRF + Simple JWT 完成小程序使用自定義用戶的注冊(cè)、登錄和認(rèn)證

    在已經(jīng)配置好djangorestframework-simplejwt的前提下進(jìn)行 小程序用戶模型類 這里的模型類并未繼承django自帶的用戶模型類,好處是后面小程序用戶也是沒(méi)法進(jìn)行admin端的,缺點(diǎn)是可能會(huì)對(duì)django自帶的權(quán)限管理有影響,如果只有小程序端的用戶的話沒(méi)問(wèn)題,但是如果還有其它用戶的話

    2024年02月10日
    瀏覽(23)
  • 使用SSM框架實(shí)現(xiàn)用戶登錄功能

    使用SSM框架實(shí)現(xiàn)用戶登錄功能

    客戶端有非空校驗(yàn) 登錄成功,跳轉(zhuǎn)到主頁(yè)面 登錄失敗,再次跳轉(zhuǎn)到登錄頁(yè)面 1、創(chuàng)建數(shù)據(jù)庫(kù) 執(zhí)行命令: CREATE DATABASE ssmdb CHARSET=\\\'utf8mb4\\\'; 查看新建的數(shù)據(jù)庫(kù) 2、創(chuàng)建用戶表? ?執(zhí)行SQL命令生成新的用戶表 t_user ?3、添加多條用戶記錄表 運(yùn)行SQL命令,添加4條記錄? ?(二)創(chuàng)建

    2024年02月06日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包