void remove_openid_vars(params_t& params) {
    map<string,string>::iterator iter, iter_next;
    for(iter = params.begin(); iter != params.end(); ) {
        iter_next = iter;
        ++iter_next;
        string param_key(iter->first);
        // if starts with openid. or modauthopenid. (for the nonce) or openid_identifier (the login) remove it
        if((param_key.substr(0, 7) == "openid." || param_key.substr(0, 14) == "modauthopenid." || param_key == "openid_identifier")) {
            params.erase(iter); // invalidates iter, but its successor iter_next is still valid
        }
        iter = iter_next;
    }
};
  void remove_openid_vars(params_t& params) {
    map<string,string>::iterator iter;
    for(iter = params.begin(); iter != params.end(); iter++) {
      string param_key(iter->first);
      // if starts with openid. or modauthopenid. (for the nonce) or openid_identifier (the login) remove it
      if((param_key.substr(0, 7) == "openid." || param_key.substr(0, 14) == "modauthopenid." || param_key == "openid_identifier")) {
        params.erase(param_key);
        // stupid map iterator screws up if we just continue the iteration... 
	// so recursion to the rescue - we'll delete them one at a time    
	remove_openid_vars(params);
        return;
      }
    }
  };