鍍金池/ 問答/PHP/ jwt的token過期了然后請(qǐng)求服務(wù)器怎么同時(shí)刷新token。并且返回用戶的信息

jwt的token過期了然后請(qǐng)求服務(wù)器怎么同時(shí)刷新token。并且返回用戶的信息?

如題,前端要求返回刷新的token 和用戶的信息

回答
編輯回答
離人歸
  1. jwt有兩種tokenrefreshTokenaccessToken,兩個(gè)都可以在AuthServiceProvider設(shè)置過期時(shí)間
  2. 一種存在cookie里或localstorage里,一種存在session或sessionstorage
  3. laravel 把refreshToken放在cookie里,把accessToken和過期時(shí)間放在body里返回
  4. 前端按照返回?cái)?shù)據(jù)保存兩種token
  5. refreshToken過期則重新登錄,accessToken過期則用refreshToken換取accessToken
  6. 可以用命令php artisan route:list查看所有auth相關(guān)api的路由

下面是一個(gè)綜合方法:

public function proxy($grantType, array $data = [])
    {
        $data = array_merge($data, [
            'client_id'     => env('PASSPORT_CLIENT_ID'),
            'client_secret' => env('PASSPORT_CLIENT_SECRET'),
            'grant_type'    => $grantType,
        ]);

        $http = new Client();
        $response = $http->post(url('oauth/token'), ['form_params' => $data,]);

        $token = json_decode((string)$response->getBody(), true);

        return response()->json([
            'token'      => $token['access_token'],
            'auth_id'    => md5($token['refresh_token']),
            'expires_in' => $token['expires_in'],
        ])->cookie('refreshToken', $token['refresh_token'], 14400, null, null, false, true);
    }
2017年8月15日 05:33