2017-04-20 95 views
0

我正在使用MEAN堆棧構建一個web應用程序。MEAN堆棧中的REST API,通過會話的id和id

在構建REST API我看到了很多的例子有以下端點

/api/contacts/:id 

爲GET,PUT和DELETE方法。

我做了一些不同的事情,我在Express框架中啓用了會話,現在我可以在執行HTTP請求時使用req.session.req.payload._id查看用戶文檔ID(用於mongoDB),這使得我可以訪問該文件。

那爲什麼我也不需要公開URL中的用戶文檔ID,當我做 一個HTTP請求。

我的問題是哪種方法更好更安全?

此外,我怎麼能得到Angular中的用戶ID傳遞給HTTP請求,以防我不使用會話。

最後一個......我也在調用更新數據庫的函數之前使用JWT作爲中間件。這給了我一些安全感,但是對於具有正確標記的用戶來說,使用不同的ID來執行HTTP請求並獲取,更新和刪除其他用戶數據是不可能的? 這對於我正在使用的當前方法(會話)來說是不可能的

回答

0

當您需要將用戶ID傳遞給端點時,您的客戶端代碼需要知道這一點,它是需要提供的後端它以某種方式 - 作爲返回的分叉的一部分,或者通常作爲對成功登錄請求的響應的一部分。客戶端可以將其存儲在cookie或本地存儲中以供以後使用。

不是很實用,不過,必須提供該用戶的ID在像每一個路線:

/api/contacts/:id 

當你的用戶需要能夠訪問其他用戶的聯繫人,那麼你可能需要在路線中使用該ID,並且當用戶想要操縱他或她自己的聯繫人時,您可能不希望有另一組路線。

我已經在實踐中看到有時做過這樣的情況下是使用特殊值的ID,如「我」,讓你的後端翻譯這樣所有路線:

/api/contacts/me 

到:

/api/contacts/:id 

其中:id是發出請求的用戶的ID,取自會話。這可以通過中間件來完成,以便一次替換所有路由的值,然後您的常規控制器可以像使用它在路由中提供的那樣使用它。

+0

嘿,爲什麼我需要「我」,如果我已經從會話中獲得id?我想我可以將它保留爲/ api/contacts,每個用戶將根據會話獲取請求的數據。另外我不需要用戶訪問其他用戶的數據。對於我來說,允許用戶使用他們想要的任何ID進行HTTP請求並不安全。 –