views:

333

answers:

2

hey everyone,

I've implemented authlogic in a rails site, and I'm trying to get openid to work correctly. So far, you can login just fine as long as you have an existing account, but not so much if you don't. I'd like to be able to automagically create a new account if the identity_url is not already in the database.

The problem is that I also need to store some additional info. if the user is logging in for the first time with their openid, I'd like to ask them to fill in basic info (name, email), BEFORE the account is created.

I've played around with a few methods, but nothing seems to be working.

Thanks in advance for any input!

A: 

Maybe you try putting the additional information into a temp table of some kind and keep track of the session the user is in. Once they have authenticated, connect the previously entered information with the the the openid information to create the real user.

Joel Meador
A: 
acts_as_authentic do |c| 
  c.openid_required_fields = [:email,"http://axschema.org/contact/email"]
end

Will allow you to require an email. I'm unsure of how to require other fields, but maybe check that axschema.org page. There is no need for the user to fill anything out other than their OpenID provider URL.

Combining login and registration could be done with something like this (untested create method from UserSessions controller, like from the authlogic tutorial stuff)

def create
  if User.find_by_openid_provider(params[:user_session]).nil? # or something like that
    @user = User.new(params[:user_session])
    if @user.save
      redirect_to whatever_path
    else
      # handle error
    end
  else
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      add_message 'Login successful!'
      redirect_to whatever_path
    else
      render :action => :new
    end
  end
end
Daniel Huckstep