如何缓存当前经过身份验证的用户? (Laravel 5)

时间:2016-04-30 01:19:03

标签: php laravel laravel-5

描述

在我的情况下,我在本地没有users表,但我有一个api,它会为我提供一个用户列表。

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

会话

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秒钟。 :(

尝试#2

缓存

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;
    });
}

我该如何解决这个问题?

我应该开始使用缓存吗?如果是这样,我该如何修改我必须做的事情呢?

我应该将它存储在会话中吗?

我现在可以接受任何建议。

对此的任何提示/建议将不胜感激!

1 个答案:

答案 0 :(得分: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中检索用户并将其添加到缓存中