2011-08-31 33 views
8

Tôi tương đối mới với Django và đó là hệ sinh thái. Tôi đang viết REST api cho ứng dụng di động của chúng tôi bằng cách sử dụng django-tastypie. Tôi đã trải qua hầu hết tất cả các ví dụ trên web về cách sử dụng hàm in đậm để tạo giao diện REST. nhưng không ai trong số chúng cụ thể cho việc POST dữ liệu từ ứng dụng khách và bạn sẽ ủy quyền cho khách hàng như thế nào.cần một ví dụ về việc cấp quyền sử dụng django-tastypie

Tôi đã sử dụng từ tastypie.authentication.BasicAuthentication như hiển thị trong ví dụ. Nó mở ra một cửa sổ pop up hỏi tên người dùng và mật khẩu và hoạt động tốt trên trình duyệt. Nhưng tôi không chắc chắn, nếu nó sẽ làm điều tương tự trên điện thoại di động (để được cụ thể, ứng dụng IOS bản địa). Tôi không hoàn toàn nhận được khi một người dùng sẽ yêu cầu đăng nhập như thế nào popup này sẽ được hiển thị trên thiết bị di động của họ nếu họ không sử dụng trình duyệt nhưng ứng dụng gốc.

Tôi hoàn toàn bị mất về điều này, tôi thực sự đánh giá cao sự giúp đỡ của bạn.

+0

Điều này ít thực sự là django và ngon hơn. Bạn nên kiểm tra xem thư viện của bạn đang thực hiện yêu cầu POST có hỗ trợ điền tên người dùng/mật khẩu theo yêu cầu hay không. –

+0

Câu hỏi dành cho AUTHENTICATION, không phải là AUTHORIZATION. – Yefei

Trả lời

0

Thanks for the help.

Tôi đã sử dụng cách tiếp cận tương tự được đề cập bởi @Iurii. Đây là giải pháp của tôi.

Tôi đã viết một lớp để xử lý xác thực và ghi đè phương thức is_authenticated. và sau đó tôi có thể sử dụng lớp này trong định nghĩa Meta của các lớp tài nguyên trong vùng.

 

    from tastypie.authentication import BasicAuthentication 
    from tastypie.resources import Resource, ModelResource 

    # class for handling authentication 
    class MyAuthentication(BasicAuthentication): 
     def is_authenticated(self, request, **kwargs): 
      # put here the logic to check username and password from request object 
      # if the user is authenticated then return True otherwise return False 

    # tastypie resource class 
    class MyResource(ModelResource): 
     class Meta: 
      authentication = MyAuthentication() 

điều này sẽ đảm bảo yêu cầu truy cập tài nguyên sẽ đi qua mã xác thực của bạn.

+0

bạn có thể vui lòng đính kèm các mã mẫu đó cho các nhận xét dưới đây 1.put tại đây lôgic để kiểm tra tên người dùng và mật khẩu từ yêu cầu objecif người dùng được xác thực rồi trả về True nếu không trả lại False – sumit

+0

@ timus2001 chắc chắn, đây là một trong những giải pháp có thể . [Mã mẫu] (http://pastebin.com/R0RnuFJs) – sanket

2

Bạn có thể kiểm tra nguồn và sử dụng ví dụ ApiKeyAuthentication. Bạn chỉ cần POST tên người dùng và khóa api để xác thực người dùng.

Có vẻ như có thể sử dụng được cho ứng dụng ios. Đây là một phần của mã kiểm tra.

def is_authenticated(self, request, **kwargs): 
    """ 
    Finds the user and checks their API key. 

    Should return either ``True`` if allowed, ``False`` if not or an 
    ``HttpResponse`` if you need something custom. 
    """ 
    from django.contrib.auth.models import User 

    username = request.GET.get('username') or request.POST.get('username') 
    api_key = request.GET.get('api_key') or request.POST.get('api_key') 

    if not username or not api_key: 
     return self._unauthorized() 

    try: 
     user = User.objects.get(username=username) 
    except (User.DoesNotExist, User.MultipleObjectsReturned): 
     return self._unauthorized() 

    request.user = user 
    return self.get_key(user, api_key) 

https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authentication.py#L128 https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authorization.py#L42

Các vấn đề liên quan