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

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

914739959

問題描述

想在每個請求里返回剩余有效時間,代碼如下:

代碼

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{
        // 通過反射獲取控制器哪些方法不需要登錄
        $controller = new ReflectionClass($request->controller);
        $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];

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

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

            $key = new Key('XXXXXX', 'HS256');   // 密鑰
            JWT::$leeway = 10;//當前時間減去60,把時間留點余地
            try {
                $decoded = JWT::decode($token,$key); //HS256方式,這里要和簽發(fā)的時候?qū)?                // 如果 Token 有效,$decoded 會包含解碼后的數(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,
                    '剩余時間' => $last_time,
                    'message' => '其他錯誤',
                ]);
            }catch(\Firebase\JWT\ExpiredException $e) {  // token過期
                return json([
                    'token_code' => 505,
                    'message' => 'token過期',
                ]);
            }catch(Exception $e) {  //其他錯誤
                return json([
                    'token_code' => 505,
                    'message' => '其他錯誤',
                ]);
            }
        }
        // 如果是options請求則返回一個空響應,否則繼續(xù)向洋蔥芯穿越,并得到一個響應
        return $handler($request);
    }
}

報錯信息

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

1262 2 1
2個回答

Tinywan

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

  • 914739959 2023-11-30

    你這個,設置怎么配的?我都沒看懂, 如果對方登陸的時候,勾了記住我,他的令牌時長就是3600秒,不然就是七天,你這個介紹太簡單了吧

  • 914739959 2023-11-30

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

  • Tinywan 2023-11-30

    你自己說了算

  • 914739959 2023-12-09

    還有個問題,如果A用戶登錄筆記本,給A發(fā)了一個令牌,他又在臺式機登錄,又發(fā)給A一個新令牌,那筆記本上的舊令牌會失效嗎?

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);
    }
}
  • 暫無評論
年代過于久遠,無法發(fā)表回答
??