仅在Laravel中保存唯一访问者的IP和时间戳

1tuwyuhd  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(131)

我的应用程序将保存用户的IP和时间戳,一旦他们访问一个特定的页面。

if (! auth()->check()) {
        $attributes = [
            'type' => 'Visited',
            'description' => 'The proposal was recently visited by someone with IP address '.\request()->getClientIp(),
            'ip' => \request()->getClientIp()
        ];

        (new ProposalLogController())->store($proposal, $attributes);
    }

下面是我如何存储所有的详细信息与IP:

public function store($proposal, $attributes)
{
    $proposalLog = new ProposalLog();
    $proposalLog->proposal_id       = $proposal->id;
    $proposalLog->event_type        = $attributes['type'];
    $proposalLog->event_description = $attributes['description'];
    $proposalLog->ip_address        = $attributes['ip'];
    $proposalLog->user_name         = $attributes['user']??'';
    $proposalLog->save();
}

当用户重新加载或刷新页面时,碰巧再次保存了相同的IP地址和时间戳。防止提交相同的IP地址、时间戳或任何处理此问题的laravel特定函数的最佳方法是什么?

carvr3hs

carvr3hs1#

一种方法是使用唯一的验证规则来防止保存重复的IP地址和时间戳。

$validatedData = request()->validate([
    'ip' => 'unique:proposal_logs,ip_address',
    'created_at' => 'unique:proposal_logs,created_at'
]);

相关问题