我正在尝试将POST
的用户名和密码auth
发送给Laravel / Passport,但它总是返回null
axios.post('http://localhost:8000/api/login', {
withCredentials: true,
auth: {
email: 'agent@test.com',
password: 'qwerty!@#$%^'
}
})
.then(res => {
console.log(res);
})
PassportController.php
public function login(){
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['email'=>request('email')], 401);
// I return email to see value
// return response()->json(['error'=>'Unauthorised'], 401);
}
}
api.php
Route::post('login', 'PassportController@login');
我检查了很多次,感觉一切正常,但是由于某些原因数据没有发送到护照。
咨询日志:
POST http://localhost:8000/api/login 401(未经授权)
{email: null}
email: null
答案 0 :(得分:2)
Laravel可能正在使用request
访问POST数据的值。 axios.post
方法的第二个参数是作为POST数据发送的对象,因此您可能只想将电子邮件和密码作为顶级密钥进行传递:
axios
.post(
"http://localhost:8000/api/login",
{
email: "agent@test.com",
password: "qwerty!@#$%^"
},
{ withCredentials: true }
)
.then(res => {
console.log(res);
});
我怀疑您通常会将认证与HTTP ("Basic") Authentication混淆在一起。 auth
键是config
对象的一部分,您可以将其作为第三个参数传递给axios.post
,后者将仅对此进行控制。我认为这不是您要追求的,只是为了完整性而在此处添加。请注意,基本身份验证接受用户名和密码:
axios
.post("http://localhost:8000/api/login", {}, {
withCredentials: true,
auth: {
username: "agent@test.com",
password: "qwerty!@#$%^"
}
})
.then(res => {
console.log(res);
});
答案 1 :(得分:0)
最后,我解决了我的问题,问题是不需要通过credentials
发送auth
和axios
,因为从后端laravel接受发布数据而不是auth数据,所以我通过了{ {1}}和email
通过表单数据不认证:
password
现在我在后端有了令牌。