我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?

我正在构build一个反应的应用程序,并login/authentication用户我使用的是auth0。

在我使用auth0之前,我一直在对我的API进行CRUD调用以发布post。 在使用auth0之前以及之前我有用户的情况下,这也是一样。

现在我使用的是auth0,我已经设置好它,把我在MongoDB中的Users集合中的用户插入。 所以,每个用户现在都有一个我将用来关联到职位的id

login后,auth0发送一个令牌(我存储在localStorage的),它看起来是这样的: eyJ0eXAiOiJKV1QiLCJhbGviOdJIUzI1NiJ9.eyJpc3MiOiJodHRwczovLzI4MTMzMC5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NTc4M2VjMjlkYmIxMAEwMTAwNTE1M2VmIiwiYXVkIeoiTzE3MGJkNnlnc3lCODkyY295Y25haVhyVkpQZHBUUlgiLCJleHAiOjE0Njw0NjkyMDQsImlhdCI6MTQ4ODDzMzIwNH0.gte9fxVURQGzOWD1ZF8AB-JachZuIkYmux6WKOZ-fdk

这是我的问题 – 我如何对我的CRUD API进行authentication调用? 也就是说,只有login的用户才能进行API调用。 我没有太多的成功find这个主题的教程。

你想要做的就是设置身份validation令牌作为您的客户端的每个请求中的标题。 既然你说auth0正在为一个已经login的用户发送一个令牌,你可以在你的用户对象的数据库中简单地存储这个令牌(可能是散列用于安全等等,但这个问题与安全无关)。

一旦你在标题中设置了令牌,你可以在request对象中直接抓取它,然后在数据库中search它。 如果它是有效的,那么你已经成功地authentication了这个请求(并且知道用户做了什么)。 如果请求头中没有有效的authentication令牌,则可以发回403错误。

也许最简单的方法是在中间件中,在这个中间件中你可以简单地设置一个值来跟踪所有的请求是否被authentication。

例如,在快递中:

 function checkAuth(req, res, next) { //grab your auth token var authToken = req.get('X-Authentication-Token'); //or whatever you've set the name of your auth header to be in the client //decrypt it it you have to, etc. //pseudo code. You'd have, for example, a function that would //search for the auth token in your database, and return the user //object if it exists, and throw an error if it didn't. validateTokenFromDB(authToken).then(function(user) { //you can set some values on your request here, so that they're //available later to your handlers. req.user = user; req.authToken = authToken; next(); }).catch(function(err) { //return your 403. return invalidRequest(req, res); }); } function invalidRequest(req, res) { res.status(403); res.end('{"error":"unauthorized"}'); } 

我会build议发送令牌在你的授权标题的格式承载:。 您可以使用您的客户端密钥validation令牌的签名,而不是存储令牌,这可以使用任何用于JSON Web令牌的SDK来完成。 您可以在Autact0快速入门中了解更多有关React的信息,以及您select的技术的Auth0服务器教程 。

希望这可以帮助!