2017-06-17 50 views
0

我正在制作一个网站,它将有用户登录。如果您的角色为admin(路由在admin中间件后面),则现在登录表单返回管理面板,如果您的角色为user,则返回主页。回到首页,你可以看到你的个人资料页面并添加一个产品(这是在auth中间件后面)。Laravel REST架构

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

如果我制作site.com/user/{id}路由,用户标识将暴露给每个登录的用户,以及例如编辑产品site.com/user/{id}/product/{product_id}

我在这里看到一些安全问题,想知道如果一个更好的解决方案是让site.com/profile路由,这将在控制器中反过来Auth::user()不公开ID的过程?

回答

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 
    } 
} 
0

如果你担心暴露用户ID,你可以尝试使用类似hashids的地方,其中ID将被编码。

0

在这里你去:

编码的idproduct_idbase64_encode()

例通过idproduct_id在URL中使用的编码与base64_encode() ,当你想使用它使用这样的:

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

因此,如何使用Base64为OP的“安全问题”一个更好的解决方案? – Neat