views:

617

answers:

1

I have a Rails 2.3.x app that implements the act_as_authentic in User model and a UserSession model as per Authlogic Github example. I am implementing an API to allow access from iPhone. Will be using HTTP Basic authentication via https (will not implement single access token). Each API call requires a username/password for the access.

I am able to access the API by calling http://username:password@localhost:3000/books.xml for example. Authlogic will not persist if using the single access token. But I am using HTTP Basic which I think Authlogic will create session for the API calls, which is not used for my API methods. So for each API call I made, new session object is created. Thus appear to me that this would load up the server resource pretty quickly. Sounds like a bad idea.

The alternative is to use the Rails authenticate_or_request_with_http_basic for API controllers. Example adding a before_filter:

def require_http_auth_user
    authenticate_or_request_with_http_basic do |username, password|
      if @current_user = User.find_by_email(username) 
        @current_user.valid_password?(password)
      else
        false
      end
    end
 end

This will bypass the Authlogic UserSession and just use the User model. But this will involve using separate authentication codes in the app.

Anyone has any comments and can share their experience? Thanks

+1  A: 

It ended up being easier for me just to make UserSession a model object. Hope this helps. Code samples of relatively efficient use included in link, lmk if there's other stuff i can help you with.

http://www.corprew.org/blog/2010/01/27/authlogic-and-objectiveresource/

corprew
Thanks for the pointer.
Gaius Parx