0
ionic
アプリをdjango rest framework
バックエンドで構築しています。単純なHTTP基本認証を行うことはできません。HTTP基本認証を行う方法
バックエンドview
:
class GetActive(APIView):
permission_classes = (permissions.IsAuthenticated,)
def get(self, request):
settings = Setting.objects.filter(active=True)
for setting in reversed(settings):
headers = {'Access-Control-Allow-Origin': '*'}
return Response({
'youtube_link': setting.youtube_link,
'text': setting.text}, headers=headers)
return HttpResponse('not found')
は、フロントエンドapi.ts
:
@Injectable()
export class ApiProvider {
url;
constructor(public http: Http) {
this.url = 'http://127.0.0.1:8000/get_active/';
}
getSettings() {
var auth = window.btoa("foo:bar"),
headers = {"Authorization": "Basic " + auth};
return this.http.get(this.url, {headers: headers}).map(res => res.json());
}
}
私はこのエラーを取得しています:
403 forbidden No 'Access-Control-Allow-Origin' header is present on the requested resource.
しかし、私はバックエンドでIsAuthenticated
permissonを削除して、ヘッダを削除した場合フロントエンドの要求からそれが動作しています。
IsAuthenticated
が上にあるときに、それが実際に機能していることを確信するために、私はこのPythonスクリプトを行います
import requests
from requests.auth import HTTPBasicAuth
theurl = 'http://localhost:8000/get_active'
username = 'foo'
password = 'bar'
r = requests.get(theurl, auth=HTTPBasicAuth(username, password))
print (r.text)
そして、それは正常に動作しているので、私はちょうどJSアナログを必要としています。
javascriptからajaxを呼び出すにはCORSをサーバ上で有効にする必要があるため、WebサーバでCORSを有効にする必要があります –