我有一个用户个人资料页面和用户个人资料/设置页面 问题是我制作了用于设置页面的中间件,以防止任何auth用户进入其他用户的设置页面或更新它们,除非ID或SLUG被匹配到auth用户,但是我每当使用API路由来获取或使用Vue时更新表示未经授权的401或500的数据。
中间件:
public function handle($request, Closure $next)
{
if ($request->slug != auth()->user()->slug) {
return redirect()->to('/');
}
return $next($request);
}
API路径:
Route::get('/profile/{slug}','ProfilePrivateController@show')->middleware('editProfile');;
VueJs:
update(){
axios.put(`/api/profile/${this.id}`,{
email : this.email,
username : this.name,
password : this.password,
education_level : this.education_level,
fb_url : this.fb_url,
twitter_url : this.twitter_url,
field : this.field
})
.then(res=>console.log(res))
}
控制器:
public function show($slug)
{
$user = User::findBySlugOrFail($slug);
return response()->json($user);
}
public function update(Request $request, $slug)
{
$user = User::findBySlug($slug);
$user->update([
'email'=>$request->email,
'education_level'=>$request->education_level,
'field'=>$request->field,
'school'=>$request->school,
'fb_url'=>$request->fb_url,
'twitter_url'=>$request->twitter_url,
]);
if($request->has('password')){
$user->save([
'password'=>$request->password
]);
}
return response()->json('user updated',200);
}
我想让用户同时更新其设置并保护API。
我真的迷失了,感谢您的帮助!
答案 0 :(得分:1)
您有一个API路由的GET请求,但是在Vue中使用了PUT请求。
将Route::get
更新为Route::put
应该可以解决问题。
此外,由于它是AJAX请求,因此您应该返回JSON响应,以便可以轻松使用它。您可以返回类似于以下内容的内容:
return response()->json(['error' => 'unauthorized'], 401);