Laravel REST结构化

时间:2017-06-17 13:34:28

标签: php laravel rest

我正在建立一个用户登录的网站。如果您的角色为admin(路由位于admin中间件后面),则登录表单现在会指向管理面板,如果您的角色为user,则会返回主页。返回主页,您可以查看个人资料页面并添加产品(位于auth中间件之后)。

我的问题是形成路线的最佳方法是什么?

如果我进行site.com/user/{id}路由,则会向每个登录的用户公开用户ID,以及使用site.com/user/{id}/product/{product_id}编辑产品。

我在这里看到了一些安全问题,我想知道一个更好的解决方案是否正在制作site.com/profile路由,而控制器又需要Auth::user()不会在流程中暴露ID?

3 个答案:

答案 0 :(得分:1)

添加没有ID的路线并使用Auth::user()这是最佳做法,让您的路线更简单

Public function profile(){
    $user = Auth::user();
    return view('profile', compact('user');
}

上面的代码比这更简单:

Public function profile($id){
    $user = User::find($id);
    //prevent authenticated from viewing other users
    if($user == Auth::user()){
         return view('profile', compact('user');
    }else{
        //return something else
    }
}

答案 1 :(得分:0)

如果您担心公开用户ID,可以尝试使用hashids之类的内容,其中ID将被编码。

答案 2 :(得分:0)

你走了:

使用id

product_idbase64_encode()进行编码

示例通过id编码传递了网址中的product_idbase64_encode() 当你想使用它时,请使用如下:

Route::get('user/{id}/product/{product_id}', function($code){
     $id = base64_decode($id);
     $product_id = base64_decode($product_id);
});