Php Laravel api返回值“;500内部服务器错误“;当其他应用程序请求时

Php Laravel api返回值“;500内部服务器错误“;当其他应用程序请求时,php,laravel,api,web,guzzle,Php,Laravel,Api,Web,Guzzle,使用幼虫api进行测试,使用fiddler或postman时返回200 但是在我尝试从另一个web应用程序访问之后,请求失败了 Api的登录函数 public function login(Request $request){ if(Auth::attempt(['email' => $request->all()['email'], 'password' => $request->all()['password']])){ $user

使用幼虫api进行测试,使用fiddler或postman时返回200

但是在我尝试从另一个web应用程序访问之后,请求失败了

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');
}
通过反复试验,我意识到没有生成代币,我无法理解为什么会发生这种情况,因为在邮递员和提琴手的帮助下,一切都顺利进行

执行到这一步,一切都会下降

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

有知识的人,请帮忙!我会非常感激的

当您的方法与接收到的方法不相等时,会发生这种情况。 提交方法应该是
post
,就像
postman
,这样就不会发生错误。
此外,要以json的形式显示信息,配方标题本身中的值必须是
Accept
应等于
Application/json

此web应用程序是否在Laravel应用程序以外的其他域上运行?如果是这样,您可能需要研究CORS(跨源资源共享)支持。 这似乎是一个受欢迎的CORS支持包

我希望这对你有帮助

编辑:

$user->createToken('MyApp')->
accessToken

比如:
$user->createToken('MyApp')->accessToken
应该是
$user->createToken('MyApp')->accessToken
。你的代码中有固定的吗

对于返回语句中的这一部分,相同的
$this->successStatus
应该是
$this->successStatus
。此外,是否定义了successStatus


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

因为它受csrf令牌保护,所以在测试环境时,这里有一个解决方案

评论这行

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

在app\Http\Kernel.php中

如果我在生成令牌之前返回用户,则所有操作都正常完成。如果(Auth::trunt…)满足这些条件,您必须使用POST方法而不是GET方法提交请求。请在代码中指出我做错了什么。我只是使用post请求。由于缺少csrf令牌,您可以共享您的路由吗?我也在寻找解决方案,希望我能找到。遇到同样的问题,请尝试此方法
php artisan passport:install
如果刷新数据库,可能需要重新安装passport。我安装了CORS,但仍然出现相同的错误500。请求到达我这里,结果返回(带标记的字符串)。我不明白为什么会这样,在邮递员的帮助下,所有的东西都能工作,但不是来自另一个应用程序。也许是口渴有什么问题?但同样,数据消失,用户成功通过身份验证,但令牌不再形成。我再次检查了你的问题。我在回答中增加了一些其他选项