Laravel passport 获取 token 时无响应?

    $this->validate($request, [
        'name' => 'required|string',
        'password' => 'required|string',
    ]);

    $name = $request->input('name');
    $password = $request->input('password');

    $user = User::where('name',$name)->first();
    if ($user->type == 0 ){
        $scope = 'student';
    }elseif ($user->type == 1){
        $scope = 'stuff';
    }elseif ($user->type ==2){
        $scope = 'company';
    }else{
        $scope = '';
    }
    $http = new Client();
    $response = $http->post(url()->previous().'/oauth/token',
        [
            'form_params'=> [
                'grant_type' => 'password',
                'client_id' =>env('CLIENT_ID'),
                'client_secret'=>env('CLIENT_SECRET'),
                'username'=>$name,
                'password'=>$password,
                'scope'=> $scope,
            ],
        ]);
    $datas = json_decode((string)$response->getBody()->getContents(),true);
    $datas['client_type'] = '2';
    return $this->build_response($datas);

每次都卡在获取$response处,也不报错

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

请求中间件

namespace App\Http\Middleware;

use Carbon\Carbon;
use Closure;
use Laravel\Passport\Client;

class OauthClient
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        \Cache::forget("oauth.client");
        if (cache("oauth.client")) {
            $client = cache("oauth.client");
        } else {
            $client = Client::query()->where("name", "Laravel Password Grant Client")
                ->firstOrFail();
            cache([
                "oauth.client" => $client
            ], Carbon::now()->addSeconds(2));
        }

        $request->request->add([
            "scope" => "*",
            "client_secret" => $client->secret,
            "client_id" => $client->id,
            "grant_type" => "password",
        ]);
        return $next($request);
    }
}

响应中间件

namespace App\Http\Middleware;

use App\User;
use Closure;
use Illuminate\Http\Response;
use function PHPSTORM_META\type;

class OauthUserExtra
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
//        dd($response);

        $r=new Response();
        if ($response->isOk()){
            $user = (new User)->findForPassport(request("username"));
            $contents = json_decode($response->getContent(),true);
            $contents["user"] = $user;
            $response->setContent($contents);
        }

        return $response;
    }
}

路由

Route::group([
        "middleware" => [
            "oauth.client",
            "oauth.user.extra",
        ]
    ],function (){
        Route::post("oauth/token", "\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken");
    });
6年前 评论

是不是nginx单进程的原因?如果是单进程,开多几个进程就可以了。我之前本地测试就遇到过。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!