Laravel api возвращает «500 Internal Server Error» по запросу других приложений - PullRequest
0 голосов
/ 16 октября 2018

с использованием API-интерфейса larvael для тестирования, при использовании fiddler или почтальона возвращается 200

Результат почтальона

Но после попытки доступа из другого веб-приложениязапрос не выполнен.

Результат моего приложения

Функция входа Api.

    public function login(Request $request){
    if(Auth::attempt(['email' => $request->all()['email'], 'password' => $request->all()['password']])){
        $user = Auth::user();
        $success['token'] = $user->createToken('MyApp')-> accessToken;
        $success['user'] = $user;
        return response()->json(['success' => $success], $this-> successStatus);
    }
    else{
        return response()->json(['error'=>'Unauthorised'], 401);
    }
}

Функция в другом веб-приложении.

    public function req()
{
    $client = new Client();
    $response = $client->request('post', 'http://testapi/api/login', [
            'form_params' =>
                ['email' => 'oleg@mail.ru',
                    'password' => '123456']
        ]
    );

    $r = $response->getBody()->getContents();
    return redirect('/home');
}

Методом проб и ошибок я понял, что токен не генерируется, я не могу понять, почему это происходит, потому что с помощью Почтальона и Фиддлера все работает.

Выполнение достигает этой строки, и все падает.

 $success['token'] = $user->createToken('MyApp')-> accessToken;

Знающие люди, помогите пожалуйста!Я буду очень благодарен!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Работает ли это веб-приложение в другом домене, чем приложение Laravel?Если это так, вам может понадобиться поддержка CORS (Cross-Origin Resource Sharing).Это, кажется, популярный пакет для поддержки CORS https://github.com/barryvdh/laravel-cors

Надеюсь, это может помочь вам.

РЕДАКТИРОВАТЬ:

У вас есть пробел между $user->createToken('MyApp')-> иaccessToken

вроде: $user->createToken('MyApp')-> accessToken должно быть $user->createToken('MyApp')->accessToken.Это исправлено в вашем коде?

То же самое для этой части в операторе возврата $this-> successStatus должно быть $this->successStatus.Кроме того, определено successStatus?

Если проблема не в этом, попробуйте dooing dd() на $user->createToken('MyApp') и посмотрите, возвращает ли это что-нибудь.Если это так, проверьте, присутствует ли свойство accessToken.

0 голосов
/ 16 октября 2018

Это происходит, когда ваш метод не равен полученному методу.Метод отправки должен быть post, как postman, поэтому ошибка не возникает.Кроме того, для отображения информации в виде json значение в самом заголовке рецепта должно быть Accept должно быть равно Application/json.

...