我使用的是使用Ionic构建一个应用程序,该应用程序消耗了Passport的身份验证中Laravel制造的REST API。我的问题是,当我提出请求时,它可以很好地工作,但是当我尝试使用PUT方法发送数据时,它总是返回"未经身份验证"。
我对不起作用的API的调用
update(data) {
let headers = new Headers({
'Content-Type': 'x-www-form-urlencoded',
'Accept': 'application/json',
'Authorization': this.token
});
return new Promise((resolve,reject)=>{
this.http.put(`${environment.API_ENDPOINT}/api/user`, {
headers: headers,
data: data
}).subscribe((result:any)=>{
resolve(result.json());
},(error:any)=>{
reject(error.json());
});
})
}
我有效的呼叫
getCurrentUser() {
let headers = new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': this.token
});
return this.http.get(`${environment.API_ENDPOINT}/api/user`, {
headers: headers
}).map(res => res.json());
}
在laravel路线/api.php
上Route::group(['middleware' => ['auth:api']], function () {
Route::get('/user', function(Request $request){
return $request->user();
});
Route::put('/user','UserController@update');
});
控制器上的更新方法
public function update(Request $request){
$user = User::find($request->user()->id);
$validator = Validator::make($request->all(),[
'nome'=> 'required|max:255',
'cpf' => 'required|max:14',
'telefoneCelular' => 'required',
]);
if($validator->fails()){
return response()->json(['message'=>$validator->errors()],400);
}else{
$user->nome = $request->input('nome');
$user->cpf = $request->input('cpf');
$user->telefoneCelular = $request->input('telefoneCelular');
if($user->save()){
return response()->json(['data'=>$user],201);
}else{
return response()->json(['message'=>'Erro ao atualizar usuário'],400);
}
}
}
ps:它与Postman合作
我弄清楚了问题是我将错误的参数传递给 this.http.put
这是有效的代码
update(data) {
let headers = new Headers({
'Content-Type': 'x-www-form-urlencoded',
'Accept': 'application/json',
'Authorization': this.token
});
console.log(headers);
return new Promise((resolve,reject)=>{
this.http.put(`${environment.API_ENDPOINT}/api/user`, data, {
headers: headers,
}).subscribe((result:any)=>{
resolve(result.json());
},(error:any)=>{
reject(error.json());
});
})
}