Php Laravel api返回值“;500内部服务器错误“;当其他应用程序请求时
使用幼虫api进行测试,使用fiddler或postman时返回200 但是在我尝试从另一个web应用程序访问之后,请求失败了 Api的登录函数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
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。请求到达我这里,结果返回(带标记的字符串)。我不明白为什么会这样,在邮递员的帮助下,所有的东西都能工作,但不是来自另一个应用程序。也许是口渴有什么问题?但同样,数据消失,用户成功通过身份验证,但令牌不再形成。我再次检查了你的问题。我在回答中增加了一些其他选项