0

Since i installed CiviCRM on my Drupal site i can't save users anymore.

Sorry, due to an error, we are unable to fulfill your request at the moment. You may want to contact your administrator or service provider with more details about what action you were performing when this occurred. We can't load the requested web page. This page requires cookies to be enabled in your browser settings. Please check this setting and enable cookies (if they are not enabled). Then try again. If this error persists, contact the site administrator for assistance.

Site Administrators: This error may indicate that users are accessing this page using a domain or URL other than the configured Base URL. EXAMPLE: Base URL is http://example.org, but some users are accessing the page via http://www.example.org or a domain alias like http://myotherexample.org.

Error type: Could not find a valid session key.

Civi Resource urls for Civi is correct. It happens when i create a user with a form.

Drupal: 8.4.0

CiviCRM: 4.7.28

Edit: Because the original website was already built in Drupal 8 and it relies on some Drupal 8 features it will not be possible to switch to Drupal 7.

1

Same accepted answer: https://stackoverflow.com/a/51280077/4329215

If you build a custom form, Civi need some fields for when a new Drupal user is created.

1: Go to Civi profiles (/civicrm/admin/uf/group?reset=1) and select the desired profile you want to include in the form. I selected "Your registration form". Go to settings of the profile and select "used for => Drupal User Registration" In Advanced Settings check Account creation required

2: In your custom form, implement the function: 'civicrm_form_user_register_form_alter'.

public function buildForm(array $form, \Drupal\Core\Form\FormStateInterface $form_state) {
    $validators = array(
        'file_validate_extensions' => array('jpg jpeg png'),
    );
    $form['uname'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Username*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['organisation'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Organisation name*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['password'] = array(
        '#type' => 'password_confirm',
        '#placeholder' => t('Password*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['name'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Full Name*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['email'] = array(
        '#type' => 'email',
        '#placeholder' => t('Email Address*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );

    $form['street'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Street*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['nr'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Nr*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['zipcode'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('Zipcode*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );
    $form['city'] = array(
        '#type' => 'textfield',
        '#placeholder' => t('City*'),
        '#required' => TRUE,
        '#attributes' => array('class' => array('form-control')),
    );

    //This did the trick!
    if( function_exists('civicrm_form_user_register_form_alter') ) {
        civicrm_form_user_register_form_alter($form,$form_state,'customRegistration');
    }

    $form['actions'] = array('#type' => 'actions');
    $form['actions']['submit'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Create'),
        '#attributes' => array('class' => array('btn', 'btn-cs', 'btn-outline')),
    );
    $form['#validate'][] = array($this, 'regValidate');
    return $form;
} 

2: In your template, add the fields with the field name from the Civi function:

{{custom_registration_form.civicrm_profile_register}}

You find the name in /modules/civicrm-drupal/civicrm.module

$form['civicrm_profile_register'] = array(
    '#markup' => \Drupal\Core\Render\Markup::create($html),
    '#cache' => [
      'max-age' => 0,
    ],
);

The fields from the profile will be included in your custom form and no problems with sessions key anymore.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.