طلب Guzzle POST إلى JWT API غير مصرح به أثناء عمل Postman

2

طلب Guzzle POST إلى JWT API غير مصرح به أثناء عمل Postman. هذا هو الرمز:

public function __construct()
{
    $this->client = new Client();
    $this->connect();
}

public function connect()
{
    $loginResult = $this->client->request('POST', config('api.base_uri') .'/auth/login', [
        'form_params' => [
            'email' => config('api.login'),
            'password' => config('api.password'),
        ]
    ]);

    dd(json_decode($loginResult->getBody()));

}

حصلت على 401 غير مصرح به أثناء تشغيل هذا الرمز. يتم تمرير أوراق الاعتماد بشكل صحيح. في هذه الأثناء ، يعمل Postman بشكل مثالي: Imagen 23100

يرجى تقديم المشورة لي ما أفعله خطأ. شكر!

تحديث فيما يلي وحدة تحكم ووظيفة هذا الطلب ضرب في جانب API:

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

    public function login(Request $request)
    {
        $credentials = $request->only(['email', 'password']);

        if (!$token = auth('api')->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized '.$credentials['email']], 401);
        }

        return $this->respondWithToken($token);
    }
...

المستخدم موجود بالفعل لأنه يعمل في Postman

تحديث 2 لدي كود مبسط لأجد أن هناك خطأ في:

Route::get('/guzzle', function () {
    $client = new Client([
        'headers' => [
            'Accept' => 'application/json'
        ]]);

    $loginResult =
        $client->request('POST', config('pics.base_uri') .'/auth/login', [
            'form_params' => [
                'email' => '****@****.com',
                'password' => '*****',
            ]
        ]);

    dd(json_decode($loginResult->getBody()));
});

ولا يعمل - حصلت على نفس الخطأ

2 الاجابة

1
افضل جواب

حسنًا ... بعد ساعتين ومساعدة كريمة من Kyslik ، تمكنت من العثور على دليل لهذه المشكلة. في الواقع ما ساعدني هو تصحيح الأخطاء والبحث عن الخطأ الذي أحصل عليه. في نهاية المطاف ، عثرت على المشاركة التالية ( https://github.com/guzzle/guzzle/issues/1413#issuecomment-222031665 ) التي تنص على شيء غريب:

لقد نقلت كل شيء إلى الاستضافة وعملت مثل السحر. آمل أن يساعد ذلك شخصًا في المستقبل.

شكرا لكل من توصل إلى إيجاد حل وبالطبع ل Kyslik !

:مؤلف
0

حاول استخدام json في خيارات Guzzle في طلب POST الخاص بك بدلاً من form_params .

public function connect()
{
    $loginResult = $this->client->request('POST', config('api.base_uri') .'/auth/login', [
        'json' => [
            'email' => config('api.login'),
            'password' => config('api.password'),
        ]
    ]);

    dd(json_decode($loginResult->getBody()));

}

form_params يجب استخدامها مع نقاط نهاية غير json.

مزيد من المعلومات حول json الخاصية: http://docs.guzzlephp.org/en/stable/quickstart.html#uploading-data

قم بتحرير مثال لنقطة النهاية التي تقبل form-params ولكن يُرجع JSON ، وهو ما قد يكون لديك:

public function __construct()
{
    $this->client = new Client()
    $this->connect();
}

public function connect()
{
    $loginResult = $this->client->request('POST', config('api.base_uri') .'/auth/login', [
        'form_params' => [
            'email' => config('api.login'),
            'password' => config('api.password'),
        ]
    ]);

    dd(json_decode($loginResult->getBody()));

}
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام