首页 文章

Laravel从视图中隐藏Div ID

提问于
浏览
1

在页面上,用户将有几个帖子 . 每个帖子都有一个id#来标识在编辑或删除帖子时使用的内容 . 使用刀片,我可以使隐藏ID ID仅在经过身份验证的用户位于自己的配置文件时显示(因为只允许他们编辑或删除帖子) .

但是,我也有一个喜欢的功能,也使用隐藏的ID div . 我不希望有人查看页面源,更改ID,然后单击“喜欢”按钮 . 有没有办法在视图中包含ID,但不允许更改它?

我可以尝试对每个进行一些验证,例如匹配用户,正文,发布的时间和ID,如果不匹配则抛出错误 . 好奇,如果有更好的方法 .

视图:

<div class="post-like">
    <a href="{{ route('post.like', ['postId' => $post->id]) }}" class="post-like-a">Like</a>
</div>

控制器:

$ postId是隐藏的ID div

public function getLike($postId)
{
    $post = Post::find($postId);
    if (!$post) {
        return redirect()->back();
    }
    if (Auth::user()->hasLikedPost($post)) {
        return redirect()->back();
    }        
    $like = $post->likes()->create([]);
    Auth::user()->likes()->save($like);
    return redirect()->back();
}

2 回答

  • 0

    如果我正确理解你的问题,这里有一个想法:你可以通过将你的ID与一些服务器端的“密钥”和散列连接来隐藏实际的帖子ID .

    例如:

    app.php 中添加类似 "post_mask_key" => "super_secret_123456" 的内容

    ...在你的代码中,类似于:

    $maskedPostId = sha1(\Config::get("app.post_mask_key") . $postId);

    然后,与您的视图共享 $maskedPostId ,该视图将嵌入到HTML中 . 用户可以尝试更改它,但是当提交时,您可以轻松地重新生成哈希(因为您知道密钥和ID服务器端)并比较这两者 .

    Note: 这种方法在加密方面很弱,但应足以屏蔽像帖子ID这样的非关键项目 .

  • 1

    它's not wise expose users'这样的ID,但如果你真的需要它,Laravel提供了一种处理用户动作授权的方法 . 可以使用policies或模型scopes来完成 .

    或者,您可以忽略这些授权并使用UUID代替ID . 有一个很好的package为你处理它 . 基本上你是'll just need to add a new field to the users'表 .

    在我的应用程序中,我使用它们 .

相关问题