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

webman 里使用 tinywan/jwt 的一些迷茫

andyzu

在 webman 里安裝了 tinywan/jwt
然后寫了個(gè)中間件在 app/middleware 目錄里

<?php
    namespace app\middleware;

    use ReflectionClass;
    use support\Log;
    use Tinywan\Jwt\JwtToken;
    use Webman\MiddlewareInterface;
    use Webman\Http\Response;
    use Webman\Http\Request;

    class TokenVerifyMiddleware implements MiddlewareInterface
    {
        public function process(Request $request, callable $handler) : Response
        {
            try {
                $request->token = JwtToken::getExtend();
            }catch (\Exception $e) {
                Log::channel('InvalidToken')->warning('錯(cuò)誤碼:' . $e->getCode());
                Log::channel('InvalidToken')->warning('錯(cuò)誤信息:' . $e->getMessage());

                return json([ 'code' => 200141, 'msg' => '請求未攜帶合法信息。', 'data' => [] ]);
            }
            return $handler($request);

        }
    }

因?yàn)槲业慕涌诓皇撬械亩夹枰?jwt token ,所以我在 route.php 里寫類似于:

Route::get('/staffinfo/{mobile}', [app\controller\api\v1\controller\StaffinfoController::class, 'checkStaffinfo'])->middleware([ app\middleware\TokenVerifyMiddleware::class]);

手動(dòng)給路由增加了要驗(yàn)證的TokenVerifyMiddleware中間件。

然后,我在Controller 里寫的是:

public function getOrderinfoDetails(Request $request){
        // 獲取 token
    $token = $request->token;
    $param = [ 'userinfo_id' => $request->input('userinfo_id') ];

    // TOKEN 驗(yàn)證身份是否合法
    if ($param['userinfo_id'] != $token['id']) {
        return json(['code' => 200112,'msg' => '非法請求,請確認(rèn)請求者身份。','data' => []]);
    }

    // 進(jìn)行參數(shù)校驗(yàn)
    $validate = new GetOrderinfoDetailsValidate();
    if (!$validate->check($param)) {
        return json($validate->getError());
    }

        // ... ... 這里是具體的邏輯,將處理的數(shù)據(jù)給 $data ... ...

    $data = $data ?? [];
    return json([ 'code' => 200100, 'msg' => '請求成功', 'data' => $data]);

}

我的問題是,我在 Controller 里寫的跟 token 驗(yàn)證有關(guān)的,咋總覺得很不優(yōu)雅?你們都是如何解決的?求大神們指點(diǎn)!

845 6 0
6個(gè)回答

shiroi

你要不把webman-admin的middleware的實(shí)現(xiàn)看一下得了,正常都是用反射的方式去處理一些免登陸免驗(yàn)權(quán)的一些方法

  • andyzu 2025-03-14

    $request->uid = JwtToken::getCurrentId();
    if (0 === $request->uid) {
    throw new UnauthorizedHttpException();
    }

    看過,這個(gè)就是 webman-admin 的,不知道找的對不

shanyi

他不是有g(shù)etCurrentId這個(gè)方法嘛,你可以在中間件里面獲取用戶ID進(jìn)入身份驗(yàn)證呀

  • andyzu 2025-03-14

    是的,但是還的讓前端傳過來 userinfo_id , 來進(jìn)行判斷,不知道我的理解對不

  • shanyi 2025-03-14

    不用呀 就是你注冊的時(shí)候就把用戶信息存到Token中呀,前端就正常傳這個(gè)Toekn呀

  • shanyi 2025-03-14

    就是注冊成功下發(fā)Toekn這樣寫: $user = [
    'id' => 1, // 這里必須是一個(gè)全局抽象唯一id
    'name' => 'shanyi',
    'email' => 'shanyi@163.com'
    ];
    $token =JwtToken::generateToken($user); 這樣就是信息存到Token中了。在中間件用getCurrentId這個(gè)就可以獲取用戶ID了

  • andyzu 2025-03-14

    那也就是說,我不需要判斷這個(gè) token 是不是合法,默認(rèn)認(rèn)為一切都是 ok的,拿來直接用對吧

  • shanyi 2025-03-14

    就是你這個(gè)Token下發(fā)的時(shí)候就是帶著身份信息的,你在中間件驗(yàn)證這個(gè)Token 就可以根據(jù)用戶信息來做驗(yàn)證來檢測是否符合你的業(yè)務(wù)邏輯呀~~

  • shanyi 2025-03-14

    中間件 try {
    // 獲取JWT中的用戶ID
    $UserId= JwtToken::getCurrentId();
    } catch (\Throwable $e) {
    return SYerror($e->getCode(),$e->getMessage());
    } //你自己的業(yè)務(wù)邏輯

  • andyzu 2025-03-14

    好的,大概理解你的意思了,我再調(diào)整調(diào)整,表示感謝!

Tinywan

截圖

  • 暫無評論
踏山河

市場搜索 《前臺api接口,復(fù)制即用》 這個(gè)一看就懂。 安裝必要的包即可!

  • 暫無評論
阿沁

截圖
截圖
這樣不好嗎 我沒有在中間件中捕獲jwt異常 使用的tinywan/exception-handler 全局捕獲

  • 暫無評論
lethe

截圖

  • andyzu 2025-03-19

    太好了,感謝各位各的一些思路,本人愚鈍,還需要消化,也請各位大神們繼續(xù)蓋樓!

??