2016-04-30 2 views
0

Описание

В моей ситуации у меня нет таблицы users локально, но у меня есть api, который предоставит мне список пользователей.Как кэшировать текущий аутентифицированный пользователь? (Laravel 5)


getUsers()

я изменить мой getUsers() для моего Auth::user() в app/Auth/ApiUserProvider.php

protected function getUsers() 
{ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts'); 

    $response = curl_exec($ch); 
    $response = json_decode($response, true); 

    curl_close($ch); 

    return $response['data']; 
} 

Выпуск

Каждый раз, когда я использовал Auth::user() в моем коде. Он вызывает мой API .../vse/accounts В моем приложении много задержки.


Попробуйте # 1

Session

protected function getUsers() 
{ 

    if(Session::has('user')){ 
     return Session::get('user'); 
    }else{ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts'); 
     $response = curl_exec($ch); 
     $response = json_decode($response, true); 
     curl_close($ch); 
     $user = $response['data']; 
     Session::put('user',$user); 
     return $user; 
    } 

} 

Результат

Это занимает 2 секунды дольше. :(


Try # 2

Cache

protected function getUsers() 
{ 
    $minutes = 60; 
    $value = Cache::remember('user', $minutes, function() { 
     //your api stuff 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts'); 
     $response = curl_exec($ch); 
     $response = json_decode($response, true); 
     curl_close($ch); 
     $user = $response['data']; 
     return $user; 
    }); 
} 

Как я могу решить это?

Должен ли я начать использовать кэш? Если да, то как Я изменяю то, что мне нужно сделать примерно так?

Должен ли я хранить его в сеансе?

Я открыт для любых предложений прямо сейчас.

Любые намеки/предложения на это будут высоко оценены!

+0

Попробуйте следующее: http: // laravel.io/forum/11-04-2014-laravel-5-how-do-i-create-a-custom-auth-in-laravel-5 –

+0

Я уже сделал пользовательский аут, я пытался кэшировать мои 'Auth: : user() ', поэтому мне не нужно постоянно ударять мой API. – ihue

ответ

1

Вы можете сделать это

protected function getUsers() { 
    $minutes = 60; 
    $user = Cache::remember('user', $minutes, function() { 
     //your api stuff 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts'); 
     $response = curl_exec($ch); 
     $response = json_decode($response, true); 
     curl_close($ch); 
     return $response['data']; 
    }); 
     return $user; 
} 

это должно работать

Иногда вы можете получить элемент из кэша, но и магазин значение по умолчанию, если запрошенный товар не есть -laravel docs

вы получите пользователя из кеша или, если он не существует, получить пользователь из api и добавьте его в кеш

+0

Быстрый вопрос, поэтому сеанс не будет работать? ОК. Я постараюсь поймать. – ihue

+0

i ДУМАЙТЕ это было бы более эффективно –

+0

Хорошо. Справедливо. :) – ihue

Смежные вопросы