final class AuthenticationLinkProvider in JSON:API Hypermedia 8
Adds an `authenticate` link for unauthenticated requests.
This presumes the only available authentication method is Drupal core's default `cookie` authentication, using the `/user/login?_format=json` URL.
Plugin annotation
@JsonapiHypermediaLinkProvider(
link_context = {
"top_level_object" => true,
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\jsonapi_hypermedia\Plugin\LinkProviderBase implements LinkProviderInterface
- class \Drupal\jsonapi_hypermedia\Plugin\jsonapi_hypermedia\LinkProvider\AuthenticationLinkProvider implements ContainerFactoryPluginInterface
- class \Drupal\jsonapi_hypermedia\Plugin\LinkProviderBase implements LinkProviderInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of AuthenticationLinkProvider
See also
https://www.drupal.org/node/2720655
File
- examples/
Plugin/ jsonapi_hypermedia/ LinkProvider/ AuthenticationLinkProvider.php, line 29
Namespace
Drupal\jsonapi_hypermedia\Plugin\jsonapi_hypermedia\LinkProviderView source
final class AuthenticationLinkProvider extends LinkProviderBase implements ContainerFactoryPluginInterface {
/**
* The current account.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$provider = new static($configuration, $plugin_id, $plugin_definition);
$provider
->setCurrentUser($container
->get('current_user'));
return $provider;
}
/**
* Sets the current account.
*
* @param \Drupal\Core\Session\AccountInterface $current_user
* The current account.
*/
public function setCurrentUser(AccountInterface $current_user) {
$this->currentUser = $current_user;
}
/**
* {@inheritdoc}
*/
public function getLinkRelationType() {
return $this->currentUser
->isAuthenticated() ? 'logout' : 'authenticate';
}
/**
* {@inheritdoc}
*/
public function getLink($context) {
assert($context instanceof JsonApiDocumentTopLevel);
$is_authenticated = $this->currentUser
->isAuthenticated();
$route_name = !$is_authenticated ? 'user.login.http' : 'user.logout.http';
$login_url = Url::fromUri($route_name, [
'query' => [
'_format' => 'json',
],
]);
$link_cacheability = new CacheableMetadata();
$link_cacheability
->addCacheContexts([
'session.exists',
'user.roles:anonymous',
]);
// The link is always accessible, but the link location and link relation
// type depend on the request. This example also uses the link's target
// attributes to indicate the media type of the link target, since it is not
// `application/vnd.api+json` as might be expected.
return AccessRestrictedLink::createLink(AccessResult::allowed(), $link_cacheability, $login_url, $this
->getLinkRelationType(), [
'type' => 'application/json',
]);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AuthenticationLinkProvider:: |
protected | property | The current account. | |
AuthenticationLinkProvider:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
AuthenticationLinkProvider:: |
public | function |
Adds, alters or removes hyperlinks from a link collection. Overrides LinkProviderInterface:: |
|
AuthenticationLinkProvider:: |
public | function |
Gets the link relation type for the provided link. Overrides LinkProviderBase:: |
|
AuthenticationLinkProvider:: |
public | function | Sets the current account. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
LinkProviderBase:: |
public | function |
Gets the link object key for the provided link. Overrides LinkProviderInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginBase:: |
public | function | Constructs a \Drupal\Component\Plugin\PluginBase object. | 92 |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |