Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我使用auth0进行用户身份验证,我有一个用于CRUD文章(title、img、desc)的API。如何对CRUD api进行身份验证调用?_Javascript_Node.js_Mongodb_Authentication_Express - Fatal编程技术网

Javascript 我使用auth0进行用户身份验证,我有一个用于CRUD文章(title、img、desc)的API。如何对CRUD api进行身份验证调用?

Javascript 我使用auth0进行用户身份验证,我有一个用于CRUD文章(title、img、desc)的API。如何对CRUD api进行身份验证调用?,javascript,node.js,mongodb,authentication,express,Javascript,Node.js,Mongodb,Authentication,Express,我正在构建一个react应用程序,为了登录/验证用户,我正在使用auth0 在我使用auth0之前,我一直在对我的API进行CRUD调用以发布文章。这也是,在使用auth0之前,在我有用户之前,我只是随意发表文章 现在我正在使用auth0,我已经对它进行了设置,以便将我创建的用户插入到我的mongodb中的Users集合中。因此,每个用户现在都有一个id,我将使用它来关联帖子 登录后,auth0发送一个令牌(我将其存储在localstorage中)这看起来是这样的:eyj0exaiioijkv1

我正在构建一个react应用程序,为了登录/验证用户,我正在使用auth0

在我使用auth0之前,我一直在对我的API进行CRUD调用以发布文章。这也是,在使用auth0之前,在我有用户之前,我只是随意发表文章

现在我正在使用auth0,我已经对它进行了设置,以便将我创建的用户插入到我的mongodb中的
Users
集合中。因此,每个用户现在都有一个
id
,我将使用它来关联帖子

登录后,auth0发送一个令牌(我将其存储在localstorage中)这看起来是这样的:
eyj0exaiioijkv1qilcjhbgviodjiuzi1nij9.eyjpc3miojhrwczovlzi4mtmzmc5hdxromc20viiwic3viijyxv0adb8ntc4m2vjjjjjjjlkymixmaewmTawnte2vmiyxvkieoitz3mgjknc3lcodky295y25havykpjkpqhjwqhwqujjjjjjjjjjjjjjjjjljljljljljljljljljljljljl6m4mq4mq4tzzmq4mqdzmzmzmzmzmzmzmq


这里是我的问题-如何对我的CRUDAPI进行身份验证调用?也就是说,只有登录的用户才能进行API调用。我在查找有关此主题的教程方面没有太多成功。

您要做的是将auth令牌设置为来自客户端的每个请求中的头。因为您说auth0正在为登录用户发送令牌,所以您可以简单地将该令牌(可能是为了安全而散列的,等等,但这个问题与安全无关)存储在数据库中,存储在用户的对象中

在标头中设置令牌后,可以在express中的
请求
对象中获取它,并在数据库中搜索它。如果它是有效的,那么您已经成功地验证了请求(并且知道是哪个用户发出的请求)。如果请求头中没有有效的身份验证令牌,则可以发回
403
错误

可能最简单的方法是在中间件中,在中间件中,您可以简单地为跟踪是否经过身份验证的所有请求设置一个值

例如,在express中:

函数checkAuth(req、res、next){
//获取您的身份验证令牌
var authToken=req.get('X-Authentication-Token');//或您在客户机中设置的auth头名称
//你必须解密它,等等。
//伪代码。例如,你会有一个函数
//在数据库中搜索auth令牌,并返回用户
//对象,如果它存在,则抛出一个错误。
validateTokenFromDB(authToken)。然后(函数(用户){
//您可以在此处根据请求设置一些值,以便
//稍后可供处理程序使用。
req.user=用户;
req.authToken=authToken;
next();
}).catch(函数(err){
//归还你的403。
返回invalidRequest(请求、回复);
});
}
功能无效请求(请求、恢复){
物质状态(403);
res.end('{“error”:“unauthorized”}');

}
我建议在您的授权头中以以下格式发送令牌:。您可以使用客户机机密验证令牌的签名,而不是存储令牌——这可以使用。您可以了解更多信息,并了解您所选择的技术

希望这有帮助