第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法使用 Flask Socket IO 登錄用戶?

有沒有辦法使用 Flask Socket IO 登錄用戶?

慕的地6264312 2022-07-26 15:41:51
我將Flask與Flask SocketIO和Flask Login一起使用。我的問題是,當(dāng)我嘗試在事件中使用該login_user函數(shù)時socketio.on,沒有錯誤,但用戶沒有登錄。我的示例可能有助于說明這一點。my example event將被調(diào)用以供用戶登錄,然后/usersonly將在該事件被調(diào)用后被調(diào)用。@socketio.on('my example event')def my_func(json):    ...    login_user(user)@app.route('/usersonly')@login.user_requireddef my_call():    print(current_user)我如何使它my_func可以登錄用戶?
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊

使用 Flask Login 是不可能的,因為在文檔中,它說 Flask Login 使用 Cookie 或 Header 密鑰進(jìn)行身份驗證,并且無法在 WebSocket(Socket IO)中訪問它,所以我建議使用基于令牌的系統(tǒng),如 API ,使用 JWT 令牌。


@socket.on('login')

def on_login(message):

    user = User.query.filter_by(email=message['email']).first()

    if not user:

       socket.emit('login', {'msg': "User not found"})


    if not user.check_password(form['password']):

       socket.emit('login', {'msg': "User not found"}) 

       return 

    user = UserSchema().dump(user).data

    token = jwt.encode(

            {'id': user['id'], 'user': user['name']})

    user['token'] = token.decode('UTF-8')

    socket.emit('login', {'user': user}) 

然后為登錄創(chuàng)建一個裝飾器:


def login_required(f):

    @wraps(f)

    def decorated(message):


        try:

            data = jwt.decode(message['token'], globals.current_app.config['SECRET_KEY'])

            try:

                user = User.query.filter_by(id=data['id']).first()

                Globals.current_user = UserSchema().dump(user).data

            except Exception as e:

                return Error.api_response(Error.USER_NOT_FOUND)

        except Exception as e:


            return Error.api_response(Error.INVALID_TOKEN)

        return f(message)


    return decorated


然后你可以像這樣使用它:


@socketio.on('my example event')

@login_required

def my_func(json):

    ...

但是請記住,您需要始終在您的 socketio 中傳遞令牌,以進(jìn)行服務(wù)器驗證,我建議您閱讀 Miguel Grinberh在燒瓶中休息 auth 的這篇博客


查看完整回答
反對 回復(fù) 2022-07-26
  • 1 回答
  • 0 關(guān)注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號