Как передать идентификатор пользователя вместе с токенами JWT в локальное хранилище

#laravel #authentication #vue.js #jwt #local-storage

#laravel #аутентификация #vue.js #jwt #локальное хранилище

Вопрос:

В настоящее время я работаю с фреймворками Laravel и Vue и использую JWT auth для аутентификации. Проблема в том, что я хочу передать токен user_id along with в локальное хранилище, чтобы, если мне нужно его где-то использовать, я мог легко получить к нему доступ window.localstorage.getItem('user_id') . Я не могу этого сделать. Я новичок в этих технологиях, пожалуйста, помогите

Я попытался передать токен, и это было успешно, но по какой-то причине я не могу передать идентификатор.

мой код аутентификации 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(TymonJWTAuthExceptionsTokenExpiredException $e){
        return response()->json(['token_expired'], $e->getStatusCode());
    }catch(TymonJWTAuthExceptionsTokenInvalidException $e){
        return response()->json(['token_invalid'], $e->getStatusCode());
    }catch(TymonJWTAuthExceptionsJWTException $e){
        return response()->json(['token_absent'], $e->getStatusCode());
    }

    return $user;
    // Log::info('user id found'.$userId);

}
  

Я хочу сохранить идентификатор, когда пользователь регистрируется и входит в систему, и он остается в локальном хранилище для использования и удаляется только тогда, когда пользователь выходит из текущей учетной записи.

Заранее спасибо.

Комментарии:

1. Вы можете создать новый веб-сервис для получения сведений о пользователе, передав сгенерированный токен. Используйте этот код: попробуйте { $this->jsondata = JWTAuth::authenticate($request->token); $this->message = ‘Получены данные пользователя.’; $this->status = true; } catch (JWTException $ e) { $this->status = false; $this->message = ‘Ошибка’; } вернуть ответ ()-> json([ ‘status’ => $this->status, ‘data’ => $this-> jsondata, ‘message’ => $this->message ]);

2. @azm_shah спасибо за ответ .. но не могли бы вы сказать мне, куда я должен поместить этот код

Ответ №1:

Создайте новую функцию в своем контроллере под функцией входа в систему.

 public function user_details(Request $request){

    try {
        $this->jsondata = JWTAuth::authenticate($request->token);
        $this->message = 'User details fetched.';
        $this->status = true;
    } catch (JWTException $e) {
        $this->status = false;
        $this->message = 'Error';
    }

    return response()->json([
        'status'    => $this->status,
        'data'      => $this->jsondata,
        'message'   => $this->message
    ]);
}
  

Не сохраняйте user_id в локальном хранилище браузера, так как это будет серьезной проблемой безопасности. Используйте этот веб-сервис, чтобы получить данные любого пользователя через сгенерированный токен.

Комментарии:

1. где я должен искать подробности.. Я должен консоль, или она сохранит данные в localStorage

2. Используете ли вы Jwt для rest API?

3. Я думаю, вам следует хранить токен в localStorage, а не хранить другую информацию

4. @AJ да, я использую Jwt для rest API… Я храню токен в localStorage, но не могу получить идентификатор пользователя в своем компоненте vue, поэтому я хотел передать идентификатор

5. @AstaLavista Да, теперь вы можете использовать post-запрос, передать этот сохраненный токен и получить ответ от веб-службы user_details.