如何对 URL laravel 7 隐藏 id?

how to hide id from URL laravel 7?

我有这个 url :

http://127.0.0.1:8000/deliverer/4

我想要这样

http://127.0.0.1:8000/deliverer/

这是我的职能:

    public function show($id)
    {

//        $userhash->hashids->encode($id);
        $user=User::find($id);

        return view('deliverer.profile')->with('user',$user);
    }

这是我的路线

Route::get('deliverer/{id}', 'deliverer\DelivererController@show')->name('profile');

这就是观点

<a          href="http://127.0.0.1:8000/deliverer/{{ Auth::user()->id }}" >
                    <i class="nc-icon nc-single-02"></i>
                    <p>Profile</p>
                </a>

我假设您只是想隐藏 ID,以便用户可以猜测下一个数字或尝试调出他们不应该调出的记录。

您查看过 UUID 吗?此处示例:(https://dev.to/wilburpowery/easily-use-uuids-in-laravel-45be) 这可能是一个解决方案。

此外,如果您担心有人可能会篡改 URL 以提取记录,您应该考虑保护您的模型。检查用户是否应该有权访问该特定记录。有很多方法可以实现。

你可以使用token或者配置一个中间件,或者像你一样散列或者加密id,调用后进行验证

url 会是这样的:

http://127.0.0.1:8000/deliverer/?id=aze45a8sd54q

假设您要完成的是查看当前经过身份验证的用户的个人资料,那么您应该按照以下步骤操作:

首先你必须修改路由并从 URL 中删除 {id},如下所示:

Route::get('deliverer', 'deliverer\DelivererController@show')->name('profile');

然后,在控制器内部,您必须从 show() 方法中删除 $id 参数,并更改方法以从经过身份验证的用户那里获取 ID。

public function show($id)
{
//        $userhash->hashids->encode($id);
    $user = \Auth::user();

    return view('deliverer.profile')->with('user',$user);
}

当然,您必须从视图路由中删除 Auth::user()->id(),并且可能使用命名路由而不是硬编码,如下所示:

<a href="{{ route('profile') }}">
    <i class="nc-icon nc-single-02"></i>
    <p>Profile</p>
</a>