Social Auth Apple is a Apple Sign-in authentication integration for Drupal. It is
based on the Social Auth and Social API projects

It adds to the site:

  • A new url: /user/login/apple.
  • A settings form at /admin/config/social-api/social-auth/apple.
  • A Apple logo in the Social Auth Login block.

REQUIREMENTS

This module requires the following modules:

* Social Auth (https://drupal.org/project/social_auth)
* Social API (https://drupal.org/project/social_api)

APPLE ACCOUNT / CREDENTIALS

The hardest part of the installation is to setup your credentials within the Apple Developer Account.
You can follow this guide:
https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple

INSTALLATION

MAP FIRSTNAME / LASTNAME TO USERPROFILE

The name is only fetched the absolute first time the user logs in with the Apple ID. If you want to reset the Apple Sign-In, you have to login with your Apple ID on https://appleid.apple.com/ and remove your app from the allowed list. Also delete any related existing users in your Drupal database.

You can map the name implementing an EventSubscriber in a custom module.

Code example

<?php

namespace Drupal\my_module\EventSubscriber;

use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\social_auth\Event\SocialAuthEvents;
use Drupal\social_auth\Event\UserFieldsEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Sets the domain context for an http request.
 */
class MyModuleSubscriber implements EventSubscriberInterface {

  use StringTranslationTrait;

  public function onSocialUserFields(UserFieldsEvent $event) {
    $social_user = $event->getSocialAuthUser();
    $fields = $event->getUserFields();

    if ($event->getPluginId() == 'social_auth_apple') {

      $parts = explode('@', $social_user->getEmail());
      $additional_data = $social_user->getAdditionalData();

      $fields['field_firstname'] = 'Apple ' . $this->t('Given name') . ' ' . $parts[0];
      if (!empty($additional_data['name']['firstName'])) {
        $fields['field_firstname'] = $additional_data['name']['firstName'];
      }

      $fields['field_name'] = 'Apple ' . $this->t('Last name') . ' ' . $parts[0];
      if (!empty($additional_data['name']['lastName'])) {
        $fields['field_name'] = $additional_data['name']['lastName'];
      }

      $event->setUserFields($fields);
    }

  }

  public static function getSubscribedEvents() {
    // This needs to fire very early in the stack, before accounts are cached.
    $events[SocialAuthEvents::USER_FIELDS][] = ['onSocialUserFields', 0];
    return $events;
  }

}

Supporting organizations: 
Funding

Project information

Releases