2017-06-17 49 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