2

我是 django-rest-auth 和 api 的新手。这是我第一次构建休息身份验证,我对授权标头和内容类型不太熟悉。

我试图理解为什么当我尝试/login/像这样使用基本授权对用户进行身份验证时:

curl -X POST -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" 'https://myurl.com/rest-auth/login/' --insecure

我收到此错误消息:

{"密码":["(此字段为必填项"]}

当像这样在正文中传递用户名和密码时:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=myuser&password=mypassword' 'https://myurl.com/rest-auth/login/' --insecure

我拿到了钥匙:

{“键”:“b5c0f3a9c7b2fc2f58a74b25f816e2968c64712f”}

为什么会这样?

我也想知道为什么在尝试相同的方法/user/时没有给我任何错误并给我序列化的用户模型

curl -X GET -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" -H "Cache-Control: no-cache" 'https://myurl.com/rest-auth/user/' --insecure

我能理解的唯一区别是,/login我使用的是 POST,而 in/user/是 GET

有人可以向我解释一下吗?

谢谢阅读!

4

2 回答 2

1

'/auth/login/' 端点专门用于获取身份验证令牌以在应用程序的其余部分与令牌身份验证一起使用。它本身不支持任何身份验证方法。第二个curl命令使用正确的方法。第三个curl命令有效,因为您使用的是支持基本身份验证的端点(您也可以使用在第二次调用中获得的令牌)。

于 2018-05-01T13:19:11.457 回答
1

参考 Inet 模式示例(使用 AltAuth 的非特权用户)

$ echo -e "GET http://localhost/slurm/v1/diag HTTP/1.1\r\nAccept: */*\r\n" |
slurmrestd -f etc/slurm.token.conf
● slurmrestd: operations_router: /slurm/v1/diag for pipe:[1052487]
● HTTP/1.1 200 OK
● Content-Length: 973
● {
● "parts_packedg": 1,
● "req_timeg": 1568051342,
● "req_time_startg": 1568050812,
● "server_thread_count": 3,
… JSON continues ...
于 2021-02-03T10:40:08.590 回答