当其他应用程序请求时,Laravel API返回“ 500 Internal Server Error”

时间:2018-10-16 07:01:31

标签: php laravel api web guzzle

使用幼虫api进行测试,使用提琴手或邮递员时返回200

Postman result

但是当我尝试从另一个Web应用程序访问后,请求失败。

My app result

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);
    }
}

在另一个Web应用程序上的功能。

    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');
}

通过反复试验,我意识到没有生成令牌,我无法理解为什么会发生这种情况,因为在Postman和Fiddler的帮助下,一切都可以解决。

执行到达这一行,一切都会下降。

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

知识渊博的人,请帮忙!我将非常感谢!

3 个答案:

答案 0 :(得分:0)

当您的方法与接收的方法不相等时,会发生这种情况。 提交方法应为post之类的postman,因此不会发生错误。 另外,要以json形式显示信息,配方标题中的值必须为Accept,应等于Application/json

答案 1 :(得分:0)

此Web应用程序是否在Laravel应用程序之外的其他域上运行?如果是这样,您可能需要研究CORS(跨源资源共享)支持。 这似乎是CORS支持https://github.com/barryvdh/laravel-cors

的流行软件包

希望这对您有所帮助。

编辑:

您在$user->createToken('MyApp')->accessToken之间留有一个空格

like:$user->createToken('MyApp')-> accessToken应该是$user->createToken('MyApp')->accessToken。这在您的代码中固定了吗?

与返回语句$this-> successStatus中的这段代码相同的应该是$this->successStatus。另外,是否定义了successStatus?

如果这不是问题,请尝试在dd()上加注$user->createToken('MyApp')并查看是否返回任何内容。如果是这样,请检查是否存在accessToken属性。

答案 2 :(得分:0)

这是因为它受csrf令牌保护,这是您在测试环境时的解决方案。

评论此行

\App\Http\Middleware\VerifyCsrfToken::class,

在app \ Http \ Kernel.php