使用幼虫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');
}
通过反复试验,我意识到没有生成令牌,我无法理解为什么会发生这种情况,因为在Postman和Fiddler的帮助下,一切都可以解决。
执行到达这一行,一切都会下降。
$success['token'] = $user->createToken('MyApp')-> accessToken;
知识渊博的人,请帮忙!我将非常感谢!
答案 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