Laravel 5.6通过oauth/token挂起 [英] Laravel 5.6 pass oauth/token hanging

查看:132
本文介绍了Laravel 5.6通过oauth/token挂起的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Laravel Passport安装程序设置了新的laravel 5.6安装程序.如果我用邮递员向 http://127.0.0.1/oauth/token 发出发布请求,我会得到有效的令牌返回:

I have set up a new laravel 5.6 install with Laravel Passport install. If I make a post request to http://127.0.0.1/oauth/token with Postman I get a valid token back:

请求

POST /oauth/token HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Cache-Control: no-cache
Postman-Token: 99529c07-0fe3-38a8-54cf-8b80a9dd5fbd

{ 
    "grant_type" : "password",
    "client_id" : 4, 
    "client_secret" : "Ib1UOS7BK12tFxOilqwea1XGJhrExbVYe8B7r8wK",
    "username" : "mail@mail.com",
    "password" : "password"
}

响应:

{
    "token_type": "Bearer",
    "expires_in": 31536000,
    "access_token": "eyJ0eXAiOiJKV1.....",
    "refresh_token": "def5020026dfeb6f91f6a9....."
}

我不希望我的用户直接访问此地址,所以我已经在routes/web.php文件中设置了一条路由:

I don't want my users accessing this directly so I have set up a route in the routes/web.php file:

Route::post('login', 'API\AuthController@login');

我的AuthController看起来像:

My AuthController looks like:

<?php

namespace App\Http\Controllers\API;

use App\OAuth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller as Controller;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\User;

class AuthController extends Controller
{

public function __construct()
{
    $this->middleware('auth:api', ['except' => ['login']]);
}

/**
 * Login user and create token
 *
 * @param  [string] email
 * @param  [string] password
 * @param  [boolean] remember_me
 * @return [string] access_token
 * @return [string] token_type
 * @return [string] expires_at
 */
public function login(Request $request)
{

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

    $credentials = request(['username', 'password']);

    return OAuth::login($credentials['username'], $credentials['password']);

}

这将调用我的OAuth类的登录方法:

This calls the login method of my OAuth class:

namespace App;

use GuzzleHttp;

class OAuth
{

public static function login($username, $password)
{
    $http = new GuzzleHttp\Client;

    $response = $http->post('http://127.0.0.1:8000/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 4,
            'client_secret' => 'Ib1UOS7BK12tFxOilqwea1XGJhrExbVYe8B7r8wK',
            'username' => $username,
            'password' => $password
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
}

}

当我使用邮递员时,发出发布请求以获取令牌:

When I use Postman make a post request to get a token:

POST /login HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Cache-Control: no-cache
Postman-Token: 94469bd8-a011-7e04-5f20-b835a5b1cac4

{
    "username" : "mail@mail.com",
    "password" : "password"
}

请求刚刚挂起.它不会以任何形式的响应或超时返回,它似乎可以永久加载.我不确定出了什么问题.如果我向邮递员发出对oauth/token的发布请求,那么它可以工作,但是,如果我对控制器方法发出对pauth的发布请求,而控制器方法又对oauth/token发出了发布请求,则它不起作用.我什么也没回来.

The request just hangs. It doesn't come back with any sort of response or timeout, it just seems to load forever. I'm not sure what is going wrong. If I make a post request to oauth/token from postman it works, but if I make a post request to a controller method which in turn makes a post request to oauth/token, it doesn't work. I'm not getting anything back.

推荐答案

这是因为内置的PHP服务器是单线程.因此,您对OAuth服务器的第二个(内部)请求将杀死第一个请求.

This is because the built-in PHP server is single threaded. Hence your second (internal) request to the OAuth server is killing the first one.

请参阅我的评论 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆