전체 사이트에서 인증을 요구하는 Django 웹 응용 프로그램이 있습니다. 필자는 기본적으로 request.user.is_anonymous
을 테스트하는 맞춤형 미들웨어로이를 수행했으며, 그렇다면 로그인 페이지로 리디렉션합니다. 그것은 다음과 같습니다Django, TastyPie, 인증 및 맞춤형 미들웨어 두통
from django.contrib.auth.views import login
from django.contrib.auth import authenticate
from django.http import HttpResponseRedirect, HttpResponse
from django.utils import simplejson
from django.core import serializers
class SiteLogin:
"This middleware requires a login for every view"
def process_request(self, request):
if request.path != '/accounts/login/' and request.user.is_anonymous():
if request.POST:
return login(request)
else:
return HttpResponseRedirect('/accounts/login/?next=%s' % request.path)
가 지금은 지금, 바로 장고 서버의 전원 요청을 얻는 것, 아이폰 OS 응용 프로그램을 만들고있어. 나는 이것을하기 위해 TastyPie를 사용하려하지만 인증 작업을 할 수 없다. 나는 ApiKeyAuthentication
을 사용하고 있으며, 올바르게 설정했다고 생각합니다. 그러나, 그냥 로그인 페이지로 리디렉션됩니다. TastyPie 요청을 처리하기 위해이 미들웨어를 편집해야하는지 궁금 해서요.하지만 TastyPie가 저를 위해 인증 해 줄 수 있다고 생각했습니다 ...
내 상황이 this question과 매우 유사하다고 생각하지만 내 맞춤 미들웨어 가는 중이다. 여기
입니다 내api.py
:
from django.contrib.auth.models import User
from django.db import models
from tastypie.resources import ModelResource
from cpm.systems.models import System
from cpm.products.models import Product
from tastypie.models import create_api_key
from tastypie.authentication import ApiKeyAuthentication
from tastypie.authorization import DjangoAuthorization, Authorization
models.signals.post_save.connect(create_api_key, sender=User)
class SystemResource(ModelResource):
class Meta:
queryset = System.objects.all()
resource_name = 'system'
authentication = ApiKeyAuthentication()
authorization = DjangoAuthorization()
class ProductResource(ModelResource):
class Meta:
queryset = Product.objects.all()
resource_name = 'product'
authentication = ApiKeyAuthentication()
authorization = DjangoAuthorization()
과의 일부 내 urls.py
:
http://192.168.1.130:8080/ios/v1/system/C0156/?username=garfonzo&api_key=12345?format=json
하지만 난 그냥 해요 :
from cpm.ios.api import SystemResource, ProductResource
from tastypie.api import Api
v1_api = Api(api_name='v1')
v1_api.register(SystemResource())
v1_api.register(ProductResource())
admin.autodiscover()
urlpatterns = patterns('',
# iOS TastyPie related:
(r'^ios/', include(v1_api.urls)),
# .... more urls....
나는 이동하려고하는 URL에있다 내 로그인 페이지로 리디렉션되었습니다. 내가 자습서를 따라 티에, 내 관리자 패널에 API 키를 만든, 그리고 내 아파치 설정에 WSGIPassAuthorization On
을 추가했습니다.
아이디어가 있으십니까?
편집 난 그냥 모두 미들웨어를 제거하고 지금은받을 수는 모두 2 내가 다음 ?format=json
을 제거하면 내가 얻을 것을 지적한다 (401) 인증 오류 ...
편집은 응답 : Sorry, not implemented yet. Please append "?format=json" to your URL.
. 따라서 은 인증을 받았지만 형식을 지정하지 않았기 때문에 실패합니다.
내 URL은 다음과 같습니다. http://192.168.1.130:8080/ios/v1/system/C0156/?username=garfonzo&api_key=12345
하지만 ?format=JSON
을 추가하면 바로 401 오류가 발생합니다.
Re : format = JSON. 쿼리 문자열에 쌍을 추가 할 때? 처음에만 사용됩니다. 나머지 쌍은 &로 구분됩니다. 그래서 쿼리 문자열/URL은 다음과 같아야합니다. http://192.168.1.130:8080/ios/v1/system/C0156/?username=garfonzo&api_key=12345&format=JSON – dekomote
@dekomote - WOW - 그게 효과가 있습니다! 좋아요, 그래서 저는 좀 더 가깝습니다. 필자는 사용자 정의 미들웨어를 사용하지 않는 한 실제로 실제로 인증 할 수 있습니다. 그래서 이것은 좋은 진전입니다. 그래서이 질문의 후반부는 여전히 있습니다 - 내 미들웨어.py (질문에 표시된)가 이제 방해 받고 있습니다. 나는 그것을 잘못 설정 했습니까? TastyPie가 나를 위해 탐색/인증하고 미들웨어를 우회 할 수 있어야합니까? – Garfonzo