views:

279

answers:

1

Hi,

today i tried to get django-piston and ExtJS working. I used the ExtJS restful example and the piston example to create a little restful webapp. Everything works fine except the authentication.

Whats the best way to get Basic/Digest/OAuth authentication working with ExtJS? Atm I'm not sure where to set the Username/Password.

Thanks

A: 

Hi,

If you want to use piston with ExtJS, I would suggest writing an anonymous handler that checks the user is logged in via standard auth.

Try this:

class AnonymousUserProfileHandler(BaseHandler):
    fields = ('title', 'url', 'affiliation')
    model = UserProfile

    def read(self, request, nickname):
        profile = UserProfile.objects.get(nickname=nickname)

        if request.user == profile.user:
            return profile

class UserProfileHandler(BaseHandler):
    anonymous = AnonymousUserProfileHandler
    allowed_methods = ('GET')
    fields = ('title', 'url', 'affiliation')
    model = UserProfile

    def read(self, request, nickname):
        profile = UserProfile.objects.get(nickname=nickname)
          return profile

In this example, when UserProfileHandler is called, without any authorization, it delegates to the anonymous handler. The anonymous handler checks whether the user is logged in via the usual request.user mode. If there is a valid user, it returns their profile object. You would then, obviously, mark the view calling this as requiring login.

The point is: when extJS makes its JSON call, it will send authentication data via the usual cookie. If you use an "anonymous" handler in Piston, but manually check the user is logged in before returning the data, then you essentially use traditional auth for your own site.

Martin Eve