Я работаю с Laravel, Vue.js , и в настоящее время я использую JWT auth для аутентификации пользователя.Я реализовал функцию для своих кнопок, где я нажимаю кнопку «вверх», голос увеличивается, а когда я нажимаю «вниз», он уменьшается, но проблема в том, что, если я переключаю пользователя и вход в систему с другим пользователем, я все равно могу уменьшить голос другого пользователя. user_id в базе данных остается прежним и не обновляется новым запросом.Я не могу найти проблему, пожалуйста, помогите, поскольку я новичок в этих технологиях.
Я попытался передать идентификатор вручную, и тогда это иногда работает.Я предполагаю, что это какая-то проблема с аутентификацией или передачей user_id
, это мой код голосования:
public function vote(Request $request, $id) {
$issue = Issue::findOrFail($id);
$issueVotes = new \App\IssueVotes();
$issueVotes->user_id = auth()->id();
$issueVotes->issue_id = $request->issue_id;
if($request->vote_type =='up') {
$already_voted = \App\IssueVotes::where('user_id', auth()->id())->where('issue_id', $request->issue_id)->where('vote_type', $request->vote_type)->first();
if(!$already_voted) {
$issue->increment('votes');
$issueVotes->vote_type = $request->vote_type;
$issueVotes->save();
}
} elseif ($request->vote_type =='down') {
$voted_up = \App\IssueVotes::where('user_id', auth()->id())->where('issue_id', $request->issue_id)->where('vote_type', 'up')->first();
if($voted_up) {
@$delete_down = \App\IssueVotes::where('user_id', auth()->id())->where('issue_id', $request->issue_id)->where('vote_type', 'up')->delete();
$issue->decrement('votes');
$issueVotes->vote_type = 'down';
// $issueVotes->save();
}
}
return response()->json($request->post_id, 200);
}
А мой код авторизации JWT:
public function login(Request $request)
{
$credentials = $request->json()->all();
try{
if (!$token = JWTAuth::attempt($credentials)){
return response()->json(['error'=>'invalid_credentials'], 400);
}
}catch(JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 500); // something went wrong whilst attempting to encode the token
}
return response()->json(compact('token'));
}
public function getAuthenticatedUser()
{
try{
if(!$user = JWTAuth::parseToken()->authenticate()){
return response()->json(['user_not_found'], 404);
}
}catch(Tymon\JWTAuth\Exceptions\TokenExpiredException $e){
return response()->json(['token_expired'], $e->getStatusCode());
}catch(Tymon\JWTAuth\Exceptions\TokenInvalidException $e){
return response()->json(['token_invalid'], $e->getStatusCode());
}catch(Tymon\JWTAuth\Exceptions\JWTException $e){
return response()->json(['token_absent'], $e->getStatusCode());
}
return $user;
}
Я пытаюсь добиться того, чтобы только пользователь, вошедший в систему, мог изменить значение голоса, но постов, за которые он проголосовал, не за каждое сообщение.
Вот скриншотмоей базы данных, куда я переключил пользователя, но user_id остается прежним