У меня есть страница профиля пользователя и страница профиля / настроек пользователя проблема в том, что я сделал промежуточное программное обеспечение для страницы настроек, чтобы запретить любому пользователю auth входить на страницу настроек других пользователей или обновлять их, если ID OR SLUG НЕ СООТВЕТСТВУЕТ пользователю auth, но я использую Vue всякий раз, когда я использую маршруты API для выборки или обновить данные, там написано неавторизованное 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.info(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.
Я действительно потерялся в этот момент. Любая помощь приветствуется!
@ vivek_23 вместо id я использовал slug
Я имел в виду заменить условие if этим и проверить снова - if ($request->input('slug') != auth()->user()->slug) {. Кроме того, если это API, который вы пытаетесь создать, вы должны возвращать ответ JSON вместо перенаправления в промежуточном программном обеспечении.
@ vivek_23, как я могу обработать ответ от промежуточного программного обеспечения в моем vueApp?
Для этого вам также нужно будет показать свой контроллер.
@ vivek_23 я редактировал вопрос проверьте пожалуйста
axios вызывает запрос на размещение /api/profile/${this.id}, каков пример результирующего URL?
У вас должен быть правильный формат JSON для отправки в качестве ответа.






У вас есть запрос GET для маршрута API, но вы используете запрос PUT в Vue.
Обновление Route::get до Route::put должно решить проблему.
Кроме того, поскольку это запрос AJAX, вы должны возвращать ответ JSON, чтобы его можно было легко использовать. Вы можете вернуть что-то похожее на:
return response()->json(['error' => 'unauthorized'], 401);
ну, я исправил, чтобы поставить .. все еще получаю ошибку 500
$request->input('slug')?