0
votes

I have authlogic and openid working correctly, and am trying to integrate oauth for twitter authentication. I do not want both a register and sign on button, so I have followed this example: Implicit user creation with Authlogic and Authlogic OAuth plugin

I get the DoubleRenderError on initial registration and subsequent log in, but refreshing the page lets the action complete successfully.

My users_controller create:

  def create
        @user = User.new(params[:user])
        @user.save do |result| # LINE A
            if result
                flash[:notice] = "Account registered!"
                redirect_to account_url
            else
                unless @user.oauth_token.nil?
                    @user = User.find_by_oauth_token(@user.oauth_token)
                    unless @user.nil?
                        UserSession.create(@user)
                        flash.now[:message] = "Welcome back!"
                        redirect_to account_url        
                    else
                        redirect_back_or_default root_path
                    end
                else
                    redirect_back_or_default root_path
                end
            end
        end
    end

And my user_sessions_controller create:

  def create
    @user_session = UserSession.new(params[:user_session])

    @user_session.save do |result|
      if result
        flash[:notice] = "Login successful!"
        redirect_back_or_default account_url
      else
        render :action => :new
      end
    end
  end

Is there a way to resolve this? Thanks

1

1 Answers

0
votes

After repeated failures, the following appears to work for normal authlogic username/password, OAuth with Twitter, and OpenID for at least google and yahoo, which is all I was interested in

  def create
   @user = User.new(params[:user])
   @user.save do |result| # LINE A
    if result
     flash[:notice] = "Account registered!"
     redirect_to account_url and return
    else
     if @user.oauth_token
      @user = User.find_by_oauth_token(@user.oauth_token)

       UserSession.create(@user)
       flash.now[:message] = "Welcome back!"
       redirect_to account_url and return        
      else
       flash[:notice] = "Something went awry. Perhaps the name or email is already in use."
       redirect_to register_path and return
     end

    end
   end
  end

Additionally, i added 'and return' into the update block in my users controller after both success and failure redirects/renders