http://www.pchserch.com

【大发时时彩技巧】Model保留ID的情况下对外提供UUID-laravel

在某些应用程序中,不暴露 ID 可以避免别人轻易获悉你数据库里模型的数量。

译者注:隐藏 ID 也可有效防止用户恶意遍历网站的内容。

嘿, 想象一下,在我的 Podcast 应用程序中,我设置了一个默认 id 在 Laravel 的 Podcast 模型中,它是一个整数,每次插入一行时都会自动增加一个,因此表中的第47个 Podcast 的 id 为47。 然后我在我的网站内声称:“这个 Podcast 应用程序拥有数百万个播客,所以千万不要错过!”,在看到最新播客 ID 时很容易被揭穿:

https://podcast.app/podcasts/47

在不需要重新连接应用程序中的所有内容的情况下隐藏ID,并且希望不被识破? 好的,有一种方法。

设置数据库

有些数据]库可以配置为在插入新行时将 UUID 设置为主键。你应该在正在使用的 RDBMS 上检查这一点,因为每个 RDBMS 的实现都有所不同。

你还可以告诉应用程序在使用 创建 Eloqument 事件新纪录时设置默认 UUID ,但这将使你在任何情况下都得使用 Eloqument 。如果你直接向数据库中插入一条记录,你可能会得到一个错误——这也是我喜欢在数据库中设置自动 UUID 而不是应用程序的)原因之一,它不应该依赖于任何东西,因为这是数据库行为。

总之,你应该像这样使用 Laravel 设置你的数据库:

<?phpuse Illuminate\Support\Facades\Schema;use Illuminate\Database\[Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreatePodcastTable extends Migration{    /**     * 运行数据库迁移     *     * @return void     */    public function up()    {        Schema::create('podcast', function (Blueprint $table) {            $table->bigIncrements('id');            $table->uuid('uuid')->index();            $table->string('filename');            $table->string('path');            $table->string('service');            $table->string('format', 4);            $table->unsginedTinyInteger('quality', 4);            $table->timestamps();            $table->timestamps();            $table->softDeletes();        });    }    /**     * 回滚数据库迁移     *     * @return void     */    public function down()    {        Schema::dropIfExists('podcast');    }}

正如你看到的,我们增加了 $table->uuid('uuid')->index() 。这段代码告诉 Laravel 去使用 UUID 这一列(如果支持,或者使用字符串列),并在这一列上创建一个索引,这样就可以通过 UUID 快速检索行,就像有人访问这个 URL 时所做的那样:

https://podcast.app/podcast/535c4cdf-70a0-4615-82f2-443e95c86aec
                

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

上一篇:再见推土机:搭载AMD皓龙处理器的泰坦超算退役 - AMD,超算
下一篇:没有了