2014-11-28 2 views
0

Я использую django-rest-framework для моего API. Чтобы отправлять данные в мой API, пользователь должен сначала войти в систему со своими учетными данными.

В командной строке проводки выглядит примерно так:

curl -X POST http://127.0.0.1:8000/snippets/ -d "code=print 789" -u username:password 

{"id": 5, "owner": "tom", "title": "foo", "code": "print 789", "linenos": false, "language": "python", "style": "friendly"} 

Теперь я пытаюсь опубликовать данные с angularjs. Вот код:

$http.post('http://localhost:8000/snippets/', self.newSnippet) 
    .then(fetchSnippets()) 
    .then(function (response) { 
      self.newSnippet = {}; 
    }) 

Конечно, это не позволило мне опубликовать эти данные, так как я не входил.

Вопрос:

Как отправить учетные данные пользователя с этим $ http.post как я сделал с завитком в командной строке (-u имя пользователя: пароль)?

+0

попробуйте django-swagger, чтобы проверить ваш отдых-api –

+0

Аутентификация в среде REST требует особого внимания. Взгляните на документ DRF: http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/. Вы также можете напрямую вызвать окно входа в систему, если этот API доступен на вашем сервере (https://docs.djangoproject.com/en/1.7/topics/auth/default/#how-to-log-a-user-in) –

ответ

0

Если HTTP Basic Authentication, поставить это до запроса:

encodedCredentials = Base64.encode('username' + ':' + 'password'); 
$http.defaults.headers.common['Authorization'] = 'Basic ' + encodedCredentials; 

Вы также должны иметь Base64 реализованы или получить его от какой-Lib.

+0

Если это базовая аутентификация, вы не можете просто добавить ее в URL? – gkalpak

+0

Ну, я думаю, что это не очень хорошая идея. И я думаю, что этот пример тоже не очень хорош, потому что будет лучше использовать JWT или что-то еще с django-rest-framework, когда вы предоставите свои учетные данные только один раз, чтобы получить этот токен. – coldmind

Смежные вопросы