Как разрешить передачу одного и того же USER_ID для каждого почтового запроса в аутентификации laravel JWT - PullRequest
1 голос
/ 13 апреля 2019

Я работаю с 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 остается прежним

1 Ответ

0 голосов
/ 13 апреля 2019

Я думаю, вы не можете правильно аутентифицировать пользователей, вы должны использовать промежуточное ПО jwt.auth для группы маршрутов

Route::middleware(['jwt.auth'])->group(function () {

   //your routes which should have bearer token for authentication

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...