国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

中間件用Firebase\JWT\JWT 怎么返回剩余有效時(shí)間?

914739959

問(wèn)題描述

想在每個(gè)請(qǐng)求里返回剩余有效時(shí)間,代碼如下:

代碼

namespace app\XXXXXXX\middleware;

use ReflectionClass;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\ExpiredException;

class AuthCheckTest implements MiddlewareInterface
{
    public function process(Request $request, callable $handler) : Response{
        // 通過(guò)反射獲取控制器哪些方法不需要登錄
        $controller = new ReflectionClass($request->controller);
        $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];

        //訪問(wèn)的方法需要登錄
        if (!in_array($request->action, $noNeedLogin)) {
            // 攔截請(qǐng)求,返回一個(gè)重定向響應(yīng),請(qǐng)求停止向洋蔥芯穿越
            $token = $request->header('Authorization');

            $token=trim(str_ireplace('Bearer ', '', $token));

            $key = new Key('XXXXXX', 'HS256');   // 密鑰
            JWT::$leeway = 10;//當(dāng)前時(shí)間減去60,把時(shí)間留點(diǎn)余地
            try {
                $decoded = JWT::decode($token,$key); //HS256方式,這里要和簽發(fā)的時(shí)候?qū)?yīng)
                // 如果 Token 有效,$decoded 會(huì)包含解碼后的數(shù)據(jù)
                $account_id = $decoded->data->account_id;
                $create_time = $decoded->nbf;
                $useful_time = $decoded->exp;
                $last_time = intval($useful_time) - intval($create_time);
                return json([
                    'token_code' => 505,
                    '剩余時(shí)間' => $last_time,
                    'message' => '其他錯(cuò)誤',
                ]);
            }catch(\Firebase\JWT\ExpiredException $e) {  // token過(guò)期
                return json([
                    'token_code' => 505,
                    'message' => 'token過(guò)期',
                ]);
            }catch(Exception $e) {  //其他錯(cuò)誤
                return json([
                    'token_code' => 505,
                    'message' => '其他錯(cuò)誤',
                ]);
            }
        }
        // 如果是options請(qǐng)求則返回一個(gè)空響應(yīng),否則繼續(xù)向洋蔥芯穿越,并得到一個(gè)響應(yīng)
        return $handler($request);
    }
}

報(bào)錯(cuò)信息

這樣直接return json 不能讓他返回嗎?要怎么打斷這個(gè)請(qǐng)求呢?又或者不打斷,給每個(gè)請(qǐng)求加一個(gè)剩余有效時(shí)間的字段,怎么加呢?

1362 2 1
2個(gè)回答

Tinywan

直接用它不好嗎?http://m.wtbis.cn/plugin/10

  • 914739959 2023-11-30

    你這個(gè),設(shè)置怎么配的?我都沒(méi)看懂, 如果對(duì)方登陸的時(shí)候,勾了記住我,他的令牌時(shí)長(zhǎng)就是3600秒,不然就是七天,你這個(gè)介紹太簡(jiǎn)單了吧

  • 914739959 2023-11-30

    看到自定義時(shí)間了,最大能多少秒有限制嗎,7天 30天都可以嗎

  • Tinywan 2023-11-30

    你自己說(shuō)了算

  • 914739959 2023-12-09

    還有個(gè)問(wèn)題,如果A用戶登錄筆記本,給A發(fā)了一個(gè)令牌,他又在臺(tái)式機(jī)登錄,又發(fā)給A一個(gè)新令牌,那筆記本上的舊令牌會(huì)失效嗎?

Tinywan

中間件直接拋出異常就行了

<?php
/**
 * @desc AuthorizationMiddleware
 * @author Tinywan(ShaoBo Wan)
 * @email 756684177@qq.com
 * @date 2020/4/7 22:52
 */

declare(strict_types=1);

namespace app\middleware;

use Tinywan\ExceptionHandler\Exception\ForbiddenHttpException;
use Tinywan\Jwt\JwtToken;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class AuthorizationMiddleware implements MiddlewareInterface
{
    /**
     * @param Request $request
     * @param callable $handler
     * @return Response
     * @throws ForbiddenHttpException
     */
    public function process(Request $request, callable $handler): Response
    {
        $request->userId = JwtToken::getCurrentId();
        if (0 === $request->userId) {
            throw new ForbiddenHttpException();
        }
        return $handler($request);
    }
}
  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??