#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.