Node.js 通过邮递员和httpie访问CRUD路由时身份验证失败

Node.js 通过邮递员和httpie访问CRUD路由时身份验证失败,node.js,express,basic-authentication,postman,stormpath,Node.js,Express,Basic Authentication,Postman,Stormpath,我正在使用express stormpath处理我的express应用程序中的用户管理。我使用的是stormpath的默认登录视图和方法,只需要电子邮件和密码。不过,我不知道问题是否真的是由stormpath造成的。在测试一些CRUD路由时,我确信我输入了正确的凭据,但身份验证失败。好吧,它不会彻底失败;我获得状态200或302,并被重定向回登录页面 我对httpie使用的命令是: http--verbose-ausername@email.com:password localhost:3000

我正在使用express stormpath处理我的express应用程序中的用户管理。我使用的是stormpath的默认登录视图和方法,只需要电子邮件和密码。不过,我不知道问题是否真的是由stormpath造成的。在测试一些CRUD路由时,我确信我输入了正确的凭据,但身份验证失败。好吧,它不会彻底失败;我获得状态200或302,并被重定向回登录页面

我对httpie使用的命令是:

http--verbose-ausername@email.com:password localhost:3000/api/users

上述httpie命令的输出为:

对于Postman(Chrome REST客户端),我使用的是基本的身份验证助手。

不过,通过web客户端登录应用程序是可行的

发生了什么事

编辑1 我就是这样保护这些路线的:

app.use(“/”,stormpath.loginRequired,routes)


app.use('/api/users',stormpath.apiAuthenticationRequired,users)

我在工作,我应该能够提供帮助。您能告诉我们您是如何保护
/api/users
路由的吗?如果要使用基本身份验证,您需要使用
stormpath.apAuthenticationRequired
中间件。

我在工作,我应该能够提供帮助。您能告诉我们您是如何保护
/api/users
路由的吗?如果要使用基本身份验证,您需要使用
stormpath.apAuthenticationRequired
中间件。

我是此库的作者,只是想插话

这里的问题是,您正在使用用户名和密码进行身份验证——这不是API身份验证的工作方式

您需要做的是首先为您的用户帐户创建一个API密钥,然后使用该密钥进行身份验证

以下是如何为用户帐户创建API密钥的示例:

req.user.createApiKey(function(err, key) {
  res.send('New API key created: id=' + key.id + ' secret=' + key.secret);
});
这将为您的用户提供一个新的API密钥,并将其输出

一旦获得API密钥(分为两部分,ID和机密),您就可以发出如下请求:

http --verbose -a apikeyid:apikeysecret localhost:3000/api/users

希望这对你有帮助。=)

我是这个图书馆的作者——只是想插话

这里的问题是,您正在使用用户名和密码进行身份验证——这不是API身份验证的工作方式

您需要做的是首先为您的用户帐户创建一个API密钥,然后使用该密钥进行身份验证

以下是如何为用户帐户创建API密钥的示例:

req.user.createApiKey(function(err, key) {
  res.send('New API key created: id=' + key.id + ' secret=' + key.secret);
});
这将为您的用户提供一个新的API密钥,并将其输出

一旦获得API密钥(分为两部分,ID和机密),您就可以发出如下请求:

http --verbose -a apikeyid:apikeysecret localhost:3000/api/users

希望这有帮助=)

我想这不会引起您的问题,但是您在Postman中显示的用户名与您在命令行中显示的用户名不同。我的实际用户名也不一样;出于隐私原因,我没有使用我的实际用户名。很抱歉给你带来了困惑。我更改了httpie命令。我认为这不会导致您的问题,但您在Postman中显示的用户名与您在命令行中显示的用户名不同。我的实际用户名也不相同;出于隐私原因,我没有使用我的实际用户名。很抱歉给你带来了困惑。我更改了httpie命令。我编辑了我的帖子。我一直在
/api
路由上使用该中间件,但在其他路由上只使用了
stormpath.loginRequired
。我编辑了我的帖子。我一直在
/api
路由上使用该中间件,但在其他路由上只使用了
stormpath.loginRequired
。感谢RDEGES的回复。甚至在API身份验证之前就存在一个问题,即登录或用户身份验证。我从所有路由中删除了
stormpath.apAuthenticationRequired
中间件。我在
stormpath中离开。需要登录,因为我需要它来执行CRUD操作。即使我尝试访问
localhost:3000/
,OP中的问题也会出现。即使对于
loginRequired
,您也需要使用web浏览器登录(与cURL不兼容)。这是因为我们的CSRF保护的工作方式。感谢rdegges的回复。甚至在API身份验证之前就存在一个问题,即登录或用户身份验证。我从所有路由中删除了
stormpath.apAuthenticationRequired
中间件。我在
stormpath中离开。需要登录,因为我需要它来执行CRUD操作。即使我尝试访问
localhost:3000/
,OP中的问题也会出现。即使对于
loginRequired
,您也需要使用web浏览器登录(与cURL不兼容)。这是因为我们的CSRF保护工作方式。