使用幼虫 API 进行测试,当使用小提琴手或邮递员时,它返回 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;
知识渊博的人,请帮忙!我会非常感激的!
此 Web 应用程序是否在 Laravel 应用程序以外的其他域上运行?如果是这样,您可能需要研究 CORS(跨源资源共享(支持。 这似乎是 CORS 支持 https://github.com/barryvdh/laravel-cors 的流行软件包
我希望这对你有所帮助。
编辑:
您在$user->createToken('MyApp')->
和accessToken
之间有一个空间
比如:$user->createToken('MyApp')-> accessToken
应该是$user->createToken('MyApp')->accessToken
的。这在您的代码中是固定的吗?
返回语句中的这一部分也是如此$this-> successStatus
应该$this->successStatus
.另外,是否定义了成功状态?
如果这不是问题所在,请尝试在$user->createToken('MyApp')
上涂鸦dd()
,看看是否返回任何内容。如果是这样,请检查是否存在accessToken
属性。
当您的方法不等于接收到的方法时,会发生这种情况。 提交方法应该是像postman
这样的post
,这样就不会发生错误。 此外,要以 json 的形式显示信息,配方标头本身中的值必须Accept
应等于Application/json
。
因为它受 csrf 令牌保护,这是您在测试 env 时的解决方案。
评论此行
AppHttpMiddlewareVerifyCsrfToken::class,
in app\Http\Kernel.php