<a id="api-reference"></a>

# API Reference

This reference covers the main extension points provided by `social-auth-core`.
The generated pages include links to the corresponding source code.

<a id="module-social_core.backends.base"></a>

<a id="authentication-backends"></a>

## Authentication backends

<a id="social_core.backends.base.BaseAuth"></a>

### *class* social_core.backends.base.BaseAuth(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

A authentication backend that authenticates the user based on
the provider response

<a id="social_core.backends.base.BaseAuth.EXTRA_DATA"></a>

#### EXTRA_DATA *: [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str) | [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str), [bool](https://docs.python.org/3/builtins/functions.html#bool)]] | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.base.BaseAuth.GET_ALL_EXTRA_DATA"></a>

#### GET_ALL_EXTRA_DATA *= False*

<a id="social_core.backends.base.BaseAuth.ID_KEY"></a>

#### ID_KEY *: [str](https://docs.python.org/3/builtins/stdtypes.html#str)* *= ''*

<a id="social_core.backends.base.BaseAuth.REQUIRES_EMAIL_VALIDATION"></a>

#### REQUIRES_EMAIL_VALIDATION *= False*

<a id="social_core.backends.base.BaseAuth.REQUIRES_USER_ID"></a>

#### REQUIRES_USER_ID *: [bool](https://docs.python.org/3/builtins/functions.html#bool)* *= False*

<a id="social_core.backends.base.BaseAuth.SEND_USER_AGENT"></a>

#### SEND_USER_AGENT *= True*

<a id="social_core.backends.base.BaseAuth.auth_allowed"></a>

#### auth_allowed(response, details)

Return True if the user should be allowed to authenticate, by
default check if email is whitelisted (if there’s a whitelist)

<a id="social_core.backends.base.BaseAuth.auth_complete"></a>

#### auth_complete(\*args, \*\*kwargs) → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

Completes login process, must return user instance

<a id="social_core.backends.base.BaseAuth.auth_extra_arguments"></a>

#### auth_extra_arguments() → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return extra arguments needed on auth process.

Configured AUTH_EXTRA_ARGUMENTS are not overridden by request data by
default. Set AUTH_EXTRA_ARGUMENTS_OVERRIDE_ALLOWLIST to an iterable of
configured extra-argument keys that may be replaced by matching request
data values.

<a id="social_core.backends.base.BaseAuth.auth_html"></a>

#### auth_html() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Must return login HTML content returned by provider

<a id="social_core.backends.base.BaseAuth.auth_url"></a>

#### auth_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Must return redirect URL to auth provider

<a id="social_core.backends.base.BaseAuth.authenticate"></a>

#### authenticate(\*args, \*\*kwargs) → [UserProtocol](#social_core.storage.UserProtocol) | [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

Authenticate user using social credentials

Authentication is made if this is the correct backend, backend
verification is made by kwargs inspection for current backend
name presence.

<a id="social_core.backends.base.BaseAuth.complete"></a>

#### complete(\*args, \*\*kwargs) → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.base.BaseAuth.continue_pipeline"></a>

#### continue_pipeline(partial: [PartialMixin](#social_core.storage.PartialMixin)) → [UserProtocol](#social_core.storage.UserProtocol) | [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

Continue previous halted pipeline

<a id="social_core.backends.base.BaseAuth.disconnect"></a>

#### disconnect(\*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)

<a id="social_core.backends.base.BaseAuth.extra_data"></a>

#### extra_data(user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None), uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), response: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any], details: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any], pipeline_kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any]) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any]

Return default extra data to store in extra_data field

<a id="social_core.backends.base.BaseAuth.get_json"></a>

#### get_json(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), method: Literal['GET', 'POST', 'DELETE'] = 'GET', headers: Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, json: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, auth: [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | AuthBase | [None](https://docs.python.org/3/builtins/constants.html#None) = None, params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, timeout: [float](https://docs.python.org/3/builtins/functions.html#float) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[Any, Any]

<a id="social_core.backends.base.BaseAuth.get_key_and_secret"></a>

#### get_key_and_secret() → [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return tuple with Consumer Key and Consumer Secret for current
service provider. Must return (key, secret), order *must* be respected.

<a id="social_core.backends.base.BaseAuth.get_key_and_secret_basic_auth"></a>

#### get_key_and_secret_basic_auth() → [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)

Generate HTTP Basic Authentication header value from KEY and SECRET.

Returns:
: Basic authentication value in the format b”Basic <base64-encoded-credentials>”

<a id="social_core.backends.base.BaseAuth.get_querystring"></a>

#### get_querystring(url, \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.base.BaseAuth.get_user"></a>

#### get_user(user_id)

Return user with given ID from the User model used by this backend.
This is called by django.contrib.auth.middleware.

<a id="social_core.backends.base.BaseAuth.get_user_details"></a>

#### get_user_details(response) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

Return user details in a known internal structure.

The returned dictionary can contain:

`username`
: Username, if any.

`email`
: User email, if any.

`fullname`
: User full name, if any.

`first_name`
: User first name, if any.

`last_name`
: User last name, if any.

<a id="social_core.backends.base.BaseAuth.get_user_id"></a>

#### get_user_id(details, response)

Return a unique ID for the current user, by default from server
response or details.

<a id="social_core.backends.base.BaseAuth.get_user_id_from_sources"></a>

#### get_user_id_from_sources(\*sources: Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any] | [None](https://docs.python.org/3/builtins/constants.html#None), id_key: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Return the selected user ID from mappings or fail clearly.

Sources are searched in order for the configured or explicitly passed
ID key. Missing, `None`, and empty-string values are rejected.

<a id="social_core.backends.base.BaseAuth.get_user_names"></a>

#### get_user_names(fullname='', first_name='', last_name='')

<a id="social_core.backends.base.BaseAuth.id_key"></a>

#### id_key() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return the ID_KEY to use for this backend, checking settings first.

<a id="social_core.backends.base.BaseAuth.log_debug"></a>

#### log_debug(message, \*args) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.base.BaseAuth.log_warning"></a>

#### log_warning(message, \*args) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.base.BaseAuth.name"></a>

#### name *= ''*

<a id="social_core.backends.base.BaseAuth.pipeline"></a>

#### pipeline(pipeline, pipeline_index: [int](https://docs.python.org/3/builtins/functions.html#int) = 0, \*args, \*\*kwargs) → [UserProtocol](#social_core.storage.UserProtocol) | [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.base.BaseAuth.prepare_auth"></a>

#### prepare_auth(user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [None](https://docs.python.org/3/builtins/constants.html#None)

Prepare backend-specific validation or state before authentication starts.

<a id="social_core.backends.base.BaseAuth.process_error"></a>

#### process_error(data) → [None](https://docs.python.org/3/builtins/constants.html#None)

Hook to process provider response errors.

Default implementation is a no-op. Backends that can detect
provider-specific error payloads should override this method and
raise an appropriate exception when needed.

<a id="social_core.backends.base.BaseAuth.request"></a>

#### request(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), , method: Literal['GET', 'POST', 'DELETE'] = 'GET', headers: Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, json: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, auth: [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | AuthBase | [None](https://docs.python.org/3/builtins/constants.html#None) = None, params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, timeout: [float](https://docs.python.org/3/builtins/functions.html#float) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → Response

<a id="social_core.backends.base.BaseAuth.run_pipeline"></a>

#### run_pipeline(pipeline: [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)], pipeline_index=0, \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)

<a id="social_core.backends.base.BaseAuth.setting"></a>

#### setting(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), default=None)

Return setting value from strategy

<a id="social_core.backends.base.BaseAuth.start"></a>

#### start() → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol)

<a id="social_core.backends.base.BaseAuth.supports_inactive_user"></a>

#### supports_inactive_user *= False*

<a id="social_core.backends.base.BaseAuth.uses_redirect"></a>

#### uses_redirect() → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Return True if this provider uses redirect url method,
otherwise return false.

<a id="social_core.backends.base.BaseAuth.validate_partial_pipeline"></a>

#### validate_partial_pipeline(partial: [PartialMixin](#social_core.storage.PartialMixin), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [None](https://docs.python.org/3/builtins/constants.html#None)

Validate backend-specific requirements before resuming a pipeline.

<a id="module-social_core.backends.oauth"></a>

<a id="social_core.backends.oauth.BaseOAuth1"></a>

### *class* social_core.backends.oauth.BaseOAuth1(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`OAuthAuth`](#social_core.backends.oauth.OAuthAuth)

Consumer based mechanism OAuth authentication, fill the needed
parameters to communicate properly with authentication service.

URLs settings:
: REQUEST_TOKEN_URL       Request token URL

<a id="social_core.backends.oauth.BaseOAuth1.OAUTH_TOKEN_PARAMETER_NAME"></a>

#### OAUTH_TOKEN_PARAMETER_NAME *= 'oauth_token'*

<a id="social_core.backends.oauth.BaseOAuth1.REDIRECT_URI_PARAMETER_NAME"></a>

#### REDIRECT_URI_PARAMETER_NAME *= 'redirect_uri'*

<a id="social_core.backends.oauth.BaseOAuth1.REQUEST_TOKEN_METHOD"></a>

#### REQUEST_TOKEN_METHOD *: Literal['GET', 'POST']* *= 'GET'*

<a id="social_core.backends.oauth.BaseOAuth1.REQUEST_TOKEN_URL"></a>

#### REQUEST_TOKEN_URL *= ''*

<a id="social_core.backends.oauth.BaseOAuth1.UNATHORIZED_TOKEN_SUFIX"></a>

#### UNATHORIZED_TOKEN_SUFIX *= 'unauthorized_token_name'*

<a id="social_core.backends.oauth.BaseOAuth1.access_token"></a>

#### access_token(token: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return request for access token value

<a id="social_core.backends.oauth.BaseOAuth1.auth_complete"></a>

#### auth_complete(\*args, \*\*kwargs)

Return user, might be logged in

<a id="social_core.backends.oauth.BaseOAuth1.auth_url"></a>

#### auth_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return redirect url

<a id="social_core.backends.oauth.BaseOAuth1.do_auth"></a>

#### do_auth(access_token, \*args, \*\*kwargs)

Finish the auth process once the access_token was retrieved

<a id="social_core.backends.oauth.BaseOAuth1.get_unauthorized_token"></a>

#### get_unauthorized_token()

<a id="social_core.backends.oauth.BaseOAuth1.oauth_auth"></a>

#### oauth_auth(token: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, oauth_verifier=None, signature_type='AUTH_HEADER')

<a id="social_core.backends.oauth.BaseOAuth1.oauth_authorization_request"></a>

#### oauth_authorization_request(token)

Generate OAuth request to authorize token.

<a id="social_core.backends.oauth.BaseOAuth1.oauth_request"></a>

#### oauth_request(token: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict), url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), params=None, method: Literal['GET', 'POST'] = 'GET') → Response

Generate OAuth request, setups callback url

<a id="social_core.backends.oauth.BaseOAuth1.process_error"></a>

#### process_error(data) → [None](https://docs.python.org/3/builtins/constants.html#None)

Hook to process provider response errors.

Default implementation is a no-op. Backends that can detect
provider-specific error payloads should override this method and
raise an appropriate exception when needed.

<a id="social_core.backends.oauth.BaseOAuth1.request_token_extra_arguments"></a>

#### request_token_extra_arguments() → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return extra arguments needed on request-token process

<a id="social_core.backends.oauth.BaseOAuth1.set_unauthorized_token"></a>

#### set_unauthorized_token()

<a id="social_core.backends.oauth.BaseOAuth1.unauthorized_token"></a>

#### unauthorized_token()

Return request for unauthorized token (first stage)

<a id="social_core.backends.oauth.BaseOAuth1.user_data"></a>

#### user_data(access_token: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict), \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)

Loads user data from service. Implement in subclass

<a id="social_core.backends.oauth.BaseOAuth2"></a>

### *class* social_core.backends.oauth.BaseOAuth2(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`OAuthAuth`](#social_core.backends.oauth.OAuthAuth)

Base class for OAuth2 providers.

OAuth2 details at:
: [https://datatracker.ietf.org/doc/html/rfc6749](https://datatracker.ietf.org/doc/html/rfc6749)

<a id="social_core.backends.oauth.BaseOAuth2.REDIRECT_STATE"></a>

#### REDIRECT_STATE *= True*

<a id="social_core.backends.oauth.BaseOAuth2.REFRESH_TOKEN_METHOD"></a>

#### REFRESH_TOKEN_METHOD *: Literal['GET', 'POST', 'DELETE']* *= 'POST'*

<a id="social_core.backends.oauth.BaseOAuth2.REFRESH_TOKEN_URL"></a>

#### REFRESH_TOKEN_URL *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.oauth.BaseOAuth2.RESPONSE_TYPE"></a>

#### RESPONSE_TYPE *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= 'code'*

<a id="social_core.backends.oauth.BaseOAuth2.STATE_PARAMETER"></a>

#### STATE_PARAMETER *= True*

<a id="social_core.backends.oauth.BaseOAuth2.USE_BASIC_AUTH"></a>

#### USE_BASIC_AUTH *= False*

<a id="social_core.backends.oauth.BaseOAuth2.auth_complete"></a>

#### auth_complete(\*args, \*\*kwargs)

Completes login process, must return user instance

<a id="social_core.backends.oauth.BaseOAuth2.auth_complete_credentials"></a>

#### auth_complete_credentials()

<a id="social_core.backends.oauth.BaseOAuth2.auth_complete_params"></a>

#### auth_complete_params(state=None)

<a id="social_core.backends.oauth.BaseOAuth2.auth_headers"></a>

#### auth_headers() → Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)]

<a id="social_core.backends.oauth.BaseOAuth2.auth_params"></a>

#### auth_params(state: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.oauth.BaseOAuth2.auth_url"></a>

#### auth_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return redirect url

<a id="social_core.backends.oauth.BaseOAuth2.do_auth"></a>

#### do_auth(access_token, \*args, \*\*kwargs)

Finish the auth process once the access_token was retrieved

<a id="social_core.backends.oauth.BaseOAuth2.extra_data"></a>

#### extra_data(user, uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), response: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], details: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], pipeline_kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

Return access_token, token_type, and extra defined names to store in
extra_data field

<a id="social_core.backends.oauth.BaseOAuth2.process_error"></a>

#### process_error(data) → [None](https://docs.python.org/3/builtins/constants.html#None)

Hook to process provider response errors.

Default implementation is a no-op. Backends that can detect
provider-specific error payloads should override this method and
raise an appropriate exception when needed.

<a id="social_core.backends.oauth.BaseOAuth2.process_refresh_token_response"></a>

#### process_refresh_token_response(response, \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)

<a id="social_core.backends.oauth.BaseOAuth2.refresh_token"></a>

#### refresh_token(token: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)

<a id="social_core.backends.oauth.BaseOAuth2.refresh_token_auth"></a>

#### refresh_token_auth() → AuthBase | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.oauth.BaseOAuth2.refresh_token_params"></a>

#### refresh_token_params(token: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.oauth.BaseOAuth2.refresh_token_url"></a>

#### refresh_token_url()

<a id="social_core.backends.oauth.BaseOAuth2.request_access_token"></a>

#### request_access_token(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), method: Literal['GET', 'POST', 'DELETE'] = 'GET', headers: Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, json: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, auth: [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | AuthBase | [None](https://docs.python.org/3/builtins/constants.html#None) = None, params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[Any, Any]

<a id="social_core.backends.oauth.BaseOAuth2.use_basic_auth"></a>

#### use_basic_auth() → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.backends.oauth.BaseOAuth2.user_data"></a>

#### user_data(access_token: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)

Loads user data from service. Implement in subclass

<a id="social_core.backends.oauth.BaseOAuth2PKCE"></a>

### *class* social_core.backends.oauth.BaseOAuth2PKCE(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`BaseOAuth2`](#social_core.backends.oauth.BaseOAuth2)

Base class for providers using OAuth2 with Proof Key for Code Exchange (PKCE).

OAuth2 details at:
: [https://datatracker.ietf.org/doc/html/rfc6749](https://datatracker.ietf.org/doc/html/rfc6749)

PKCE details at:
: [https://datatracker.ietf.org/doc/html/rfc7636](https://datatracker.ietf.org/doc/html/rfc7636)

<a id="social_core.backends.oauth.BaseOAuth2PKCE.DEFAULT_USE_PKCE"></a>

#### DEFAULT_USE_PKCE *= True*

<a id="social_core.backends.oauth.BaseOAuth2PKCE.PKCE_DEFAULT_CODE_CHALLENGE_METHOD"></a>

#### PKCE_DEFAULT_CODE_CHALLENGE_METHOD *= 'S256'*

<a id="social_core.backends.oauth.BaseOAuth2PKCE.PKCE_DEFAULT_CODE_VERIFIER_LENGTH"></a>

#### PKCE_DEFAULT_CODE_VERIFIER_LENGTH *= 43*

<a id="social_core.backends.oauth.BaseOAuth2PKCE.auth_complete_params"></a>

#### auth_complete_params(state=None)

<a id="social_core.backends.oauth.BaseOAuth2PKCE.auth_params"></a>

#### auth_params(state=None)

<a id="social_core.backends.oauth.BaseOAuth2PKCE.create_code_verifier"></a>

#### create_code_verifier()

<a id="social_core.backends.oauth.BaseOAuth2PKCE.generate_code_challenge"></a>

#### generate_code_challenge(code_verifier, challenge_method)

<a id="social_core.backends.oauth.BaseOAuth2PKCE.get_code_verifier"></a>

#### get_code_verifier()

<a id="social_core.backends.oauth.OAuthAuth"></a>

### *class* social_core.backends.oauth.OAuthAuth(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`BaseAuth`](#social_core.backends.base.BaseAuth)

OAuth authentication backend base class.

Settings will be inspected to get more values names that should be
stored on extra_data field. The setting name is created following the
pattern SOCIAL_AUTH_<uppercase current backend name>_EXTRA_DATA.

access_token is always stored.

URLs settings:
: AUTHORIZATION_URL       Authorization service url
  ACCESS_TOKEN_URL        Access token URL

<a id="social_core.backends.oauth.OAuthAuth.ACCESS_TOKEN_METHOD"></a>

#### ACCESS_TOKEN_METHOD *: Literal['GET', 'POST']* *= 'POST'*

<a id="social_core.backends.oauth.OAuthAuth.ACCESS_TOKEN_PAYLOAD"></a>

#### ACCESS_TOKEN_PAYLOAD *: Literal['form', 'json']* *= 'form'*

<a id="social_core.backends.oauth.OAuthAuth.ACCESS_TOKEN_URL"></a>

#### ACCESS_TOKEN_URL *= ''*

<a id="social_core.backends.oauth.OAuthAuth.AUTHORIZATION_URL"></a>

#### AUTHORIZATION_URL *= ''*

<a id="social_core.backends.oauth.OAuthAuth.DEFAULT_SCOPE"></a>

#### DEFAULT_SCOPE *: [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.oauth.OAuthAuth.ID_KEY"></a>

#### ID_KEY *= 'id'*

<a id="social_core.backends.oauth.OAuthAuth.REDIRECT_STATE"></a>

#### REDIRECT_STATE *= False*

<a id="social_core.backends.oauth.OAuthAuth.REVOKE_TOKEN_METHOD"></a>

#### REVOKE_TOKEN_METHOD *: Literal['GET', 'POST', 'DELETE']* *= 'POST'*

<a id="social_core.backends.oauth.OAuthAuth.REVOKE_TOKEN_URL"></a>

#### REVOKE_TOKEN_URL *: [str](https://docs.python.org/3/builtins/stdtypes.html#str)* *= ''*

<a id="social_core.backends.oauth.OAuthAuth.SCOPE_PARAMETER_NAME"></a>

#### SCOPE_PARAMETER_NAME *= 'scope'*

<a id="social_core.backends.oauth.OAuthAuth.SCOPE_SEPARATOR"></a>

#### SCOPE_SEPARATOR *= ' '*

<a id="social_core.backends.oauth.OAuthAuth.STATE_PARAMETER"></a>

#### STATE_PARAMETER *= False*

<a id="social_core.backends.oauth.OAuthAuth.access_token_url"></a>

#### access_token_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.oauth.OAuthAuth.authorization_url"></a>

#### authorization_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.oauth.OAuthAuth.extra_data"></a>

#### extra_data(user, uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), response: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], details: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], pipeline_kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

Return access_token and extra defined names to store in
extra_data field

<a id="social_core.backends.oauth.OAuthAuth.get_access_token_url_format"></a>

#### get_access_token_url_format() → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.oauth.OAuthAuth.get_authorization_url_format"></a>

#### get_authorization_url_format() → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.oauth.OAuthAuth.get_or_create_state"></a>

#### get_or_create_state() → [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.oauth.OAuthAuth.get_redirect_uri"></a>

#### get_redirect_uri(state: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Build redirect with redirect_state parameter.

<a id="social_core.backends.oauth.OAuthAuth.get_request_state"></a>

#### get_request_state()

<a id="social_core.backends.oauth.OAuthAuth.get_scope"></a>

#### get_scope() → [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return list with needed access scope

<a id="social_core.backends.oauth.OAuthAuth.get_scope_argument"></a>

#### get_scope_argument()

<a id="social_core.backends.oauth.OAuthAuth.get_session_state"></a>

#### get_session_state()

<a id="social_core.backends.oauth.OAuthAuth.process_revoke_token_response"></a>

#### process_revoke_token_response(response)

<a id="social_core.backends.oauth.OAuthAuth.revoke_token"></a>

#### revoke_token(token, uid)

<a id="social_core.backends.oauth.OAuthAuth.revoke_token_headers"></a>

#### revoke_token_headers(token, uid) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

<a id="social_core.backends.oauth.OAuthAuth.revoke_token_params"></a>

#### revoke_token_params(token, uid) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

<a id="social_core.backends.oauth.OAuthAuth.revoke_token_url"></a>

#### revoke_token_url(token, uid) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.oauth.OAuthAuth.state_token"></a>

#### state_token()

Generate csrf token to include as state parameter.

<a id="social_core.backends.oauth.OAuthAuth.user_data"></a>

#### user_data(access_token, \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)

Loads user data from service. Implement in subclass

<a id="social_core.backends.oauth.OAuthAuth.validate_state"></a>

#### validate_state()

Validate state value. Raises exception on error, returns state
value if valid.

<a id="module-social_core.backends.open_id"></a>

<a id="social_core.backends.open_id.OpenIdAuth"></a>

### *class* social_core.backends.open_id.OpenIdAuth(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`BaseAuth`](#social_core.backends.base.BaseAuth)

Generic OpenID authentication backend

<a id="social_core.backends.open_id.OpenIdAuth.URL"></a>

#### URL *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id.OpenIdAuth.USERNAME_KEY"></a>

#### USERNAME_KEY *= 'username'*

<a id="social_core.backends.open_id.OpenIdAuth.auth_complete"></a>

#### auth_complete(\*args, \*\*kwargs)

Complete auth process

<a id="social_core.backends.open_id.OpenIdAuth.auth_html"></a>

#### auth_html()

Return auth HTML returned by service

<a id="social_core.backends.open_id.OpenIdAuth.auth_url"></a>

#### auth_url()

Return auth URL returned by service

<a id="social_core.backends.open_id.OpenIdAuth.consumer"></a>

#### consumer()

Create an OpenID Consumer object for the given Django request.

<a id="social_core.backends.open_id.OpenIdAuth.continue_pipeline"></a>

#### continue_pipeline(partial)

Continue previous halted pipeline

<a id="social_core.backends.open_id.OpenIdAuth.create_consumer"></a>

#### create_consumer(store=None)

<a id="social_core.backends.open_id.OpenIdAuth.extra_data"></a>

#### extra_data(user, uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), response: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], details: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], pipeline_kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

Return defined extra data names to store in extra_data field.
Settings will be inspected to get more values names that should be
stored on extra_data field. Setting name is created from current
backend name (all uppercase) plus \_SREG_EXTRA_DATA and
\_AX_EXTRA_DATA because values can be returned by SimpleRegistration
or AttributeExchange schemas.

Both list must be a value name and an alias mapping similar to
SREG_ATTR, OLD_AX_ATTRS or AX_SCHEMA_ATTRS

<a id="social_core.backends.open_id.OpenIdAuth.get_ax_attributes"></a>

#### get_ax_attributes() → [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)]]

<a id="social_core.backends.open_id.OpenIdAuth.get_consumer_store"></a>

#### get_consumer_store() → OpenIdStore | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.open_id.OpenIdAuth.get_return_to"></a>

#### get_return_to() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id.OpenIdAuth.get_sreg_attributes"></a>

#### get_sreg_attributes()

<a id="social_core.backends.open_id.OpenIdAuth.get_user_details"></a>

#### get_user_details(response)

Return user details from an OpenID request

<a id="social_core.backends.open_id.OpenIdAuth.get_user_id"></a>

#### get_user_id(details, response)

Return the protocol-defined identity URL provided by the service.

OpenID identity is asserted as a URL rather than a response mapping field,
so the configurable ID_KEY does not apply to this backend.

<a id="social_core.backends.open_id.OpenIdAuth.name"></a>

#### name *= 'openid'*

<a id="social_core.backends.open_id.OpenIdAuth.openid_request"></a>

#### openid_request(params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Return openid request

<a id="social_core.backends.open_id.OpenIdAuth.openid_url"></a>

#### openid_url()

Return service provider URL.
This base class is generic accepting a POST parameter that specifies
provider URL.

<a id="social_core.backends.open_id.OpenIdAuth.process_error"></a>

#### process_error(data) → [None](https://docs.python.org/3/builtins/constants.html#None)

Hook to process provider response errors.

Default implementation is a no-op. Backends that can detect
provider-specific error payloads should override this method and
raise an appropriate exception when needed.

<a id="social_core.backends.open_id.OpenIdAuth.setup_request"></a>

#### setup_request(params=None)

Setup request

<a id="social_core.backends.open_id.OpenIdAuth.trust_root"></a>

#### trust_root()

Return trust-root option

<a id="social_core.backends.open_id.OpenIdAuth.uses_redirect"></a>

#### uses_redirect()

Return true if openid request will be handled with redirect or
HTML content will be returned.

<a id="social_core.backends.open_id.OpenIdAuth.values_from_response"></a>

#### values_from_response(response, sreg_names=None, ax_names=None)

Return values from SimpleRegistration response or
AttributeExchange response if present.

@sreg_names and @ax_names must be a list of name and aliases
for such name. The alias will be used as mapping key.

<a id="module-social_core.backends.open_id_connect"></a>

<a id="social_core.backends.open_id_connect.OpenIdConnectAssociation"></a>

### *class* social_core.backends.open_id_connect.OpenIdConnectAssociation(handle, secret='', issued=0, lifetime=0, assoc_type='')

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

Use Association model to save the nonce by force.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth"></a>

### *class* social_core.backends.open_id_connect.OpenIdConnectAuth(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`BaseOAuth2PKCE`](#social_core.backends.oauth.BaseOAuth2PKCE)

Base class for Open ID Connect backends.
Currently only the code response type is supported.

It can also be directly instantiated as a generic OIDC backend.
To use it you will need to set at minimum:

SOCIAL_AUTH_OIDC_OIDC_ENDPOINT = ‘[https://](https://)…..’  # endpoint without /.well-known/openid-configuration
SOCIAL_AUTH_OIDC_KEY = ‘<client_id>’
SOCIAL_AUTH_OIDC_SECRET = ‘<client_secret>’
SOCIAL_AUTH_OIDC_USE_PKCE = True  # optional, enables PKCE for this backend

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ACCESS_TOKEN_URL"></a>

#### ACCESS_TOKEN_URL *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ACR_VALUES"></a>

#### ACR_VALUES *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.AUTHORIZATION_URL"></a>

#### AUTHORIZATION_URL *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.CUSTOM_AT_HASH_ALGO"></a>

#### CUSTOM_AT_HASH_ALGO *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.DEFAULT_SCOPE"></a>

#### DEFAULT_SCOPE *= ['openid', 'profile', 'email']*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.DEFAULT_USE_PKCE"></a>

#### DEFAULT_USE_PKCE *= False*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.DISPLAY"></a>

#### DISPLAY *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.EMAIL_KEY"></a>

#### EMAIL_KEY *= 'email'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.EXTRA_DATA"></a>

#### EXTRA_DATA *= ['id_token', 'refresh_token', ('sub', 'id')]*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.FIRST_NAME_KEY"></a>

#### FIRST_NAME_KEY *= 'given_name'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.FULLNAME_KEY"></a>

#### FULLNAME_KEY *= 'name'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ID_KEY"></a>

#### ID_KEY *= 'sub'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ID_TOKEN_HINT"></a>

#### ID_TOKEN_HINT *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ID_TOKEN_ISSUER"></a>

#### ID_TOKEN_ISSUER *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.ID_TOKEN_MAX_AGE"></a>

#### ID_TOKEN_MAX_AGE *= 600*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.JWKS_URI"></a>

#### JWKS_URI *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.JWT_ALGORITHMS"></a>

#### JWT_ALGORITHMS *= ['RS256']*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.JWT_DECODE_OPTIONS"></a>

#### JWT_DECODE_OPTIONS *: Options* *= {}*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.JWT_LEEWAY"></a>

#### JWT_LEEWAY *: [float](https://docs.python.org/3/builtins/functions.html#float)* *= 1.0*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.LAST_NAME_KEY"></a>

#### LAST_NAME_KEY *= 'family_name'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.LOGIN_HINT"></a>

#### LOGIN_HINT *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.MAX_AGE"></a>

#### MAX_AGE *: [int](https://docs.python.org/3/builtins/functions.html#int) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.OIDC_ENDPOINT"></a>

#### OIDC_ENDPOINT *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.PKCE_DEFAULT_CODE_CHALLENGE_METHOD"></a>

#### PKCE_DEFAULT_CODE_CHALLENGE_METHOD *= 'S256'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.PROMPT"></a>

#### PROMPT *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.REDIRECT_STATE"></a>

#### REDIRECT_STATE *= False*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.REVOKE_TOKEN_METHOD"></a>

#### REVOKE_TOKEN_METHOD *: Literal['GET', 'POST', 'DELETE']* *= 'GET'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.REVOKE_TOKEN_URL"></a>

#### REVOKE_TOKEN_URL *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.TOKEN_ENDPOINT_AUTH_METHOD"></a>

#### TOKEN_ENDPOINT_AUTH_METHOD *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.UI_LOCALES"></a>

#### UI_LOCALES *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.USERINFO_URL"></a>

#### USERINFO_URL *= ''*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.USERNAME_KEY"></a>

#### USERNAME_KEY *= 'preferred_username'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.VALIDATE_AT_HASH"></a>

#### VALIDATE_AT_HASH *: [bool](https://docs.python.org/3/builtins/functions.html#bool)* *= True*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.access_token_url"></a>

#### access_token_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.auth_params"></a>

#### auth_params(state=None)

Return extra arguments needed on auth process.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.authorization_url"></a>

#### authorization_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.calc_at_hash"></a>

#### *static* calc_at_hash(access_token, algorithm, custom_at_hash_algo: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Calculates “at_hash” claim which is not done by pyjwt.
Custom “at_hash” algorithm is used for non-standard token.

See [https://pyjwt.readthedocs.io/en/stable/usage.html#oidc-login-flow](https://pyjwt.readthedocs.io/en/stable/usage.html#oidc-login-flow)
See [https://github.com/python-social-auth/social-core/issues/1306](https://github.com/python-social-auth/social-core/issues/1306)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.decode_and_validate_id_token"></a>

#### decode_and_validate_id_token(id_token, access_token)

Validate an ID token’s signature and self-contained claims.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.extra_data"></a>

#### extra_data(user, uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), response: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], details: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], pipeline_kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]

Return access_token, token_type, and extra defined names to store in
extra_data field

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.find_valid_key"></a>

#### find_valid_key(id_token)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_and_store_nonce"></a>

#### get_and_store_nonce(url, state)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_jwks_keys"></a>

#### get_jwks_keys(\*args, \*\*kwargs)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_nonce"></a>

#### get_nonce(nonce)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_remote_jwks_keys"></a>

#### get_remote_jwks_keys()

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_setting_config"></a>

#### get_setting_config(setting_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), oidc_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), default: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_user_details"></a>

#### get_user_details(response)

Return user details from the UserInfo response or ID token.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.get_user_id"></a>

#### get_user_id(details, response)

Return a unique ID for the current user, by default from server
response or details.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.id_token_audiences"></a>

#### *static* id_token_audiences(audience) → [set](https://docs.python.org/3/builtins/stdtypes.html#set)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.id_token_issuer"></a>

#### id_token_issuer() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.jwks_uri"></a>

#### jwks_uri() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.name"></a>

#### name *= 'oidc'*

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.oidc_config"></a>

#### oidc_config(\*args, \*\*kwargs)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.oidc_endpoint"></a>

#### oidc_endpoint() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.process_refresh_token_response"></a>

#### process_refresh_token_response(response, \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.remove_nonce"></a>

#### remove_nonce(nonce_id) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.request_access_token"></a>

#### request_access_token(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), method: Literal['GET', 'POST', 'DELETE'] = 'GET', headers: Mapping[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, json: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, auth: [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | AuthBase | [None](https://docs.python.org/3/builtins/constants.html#None) = None, params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[Any, Any]

Retrieve the access token. Also, validate the id_token and
store it (temporarily).

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.revoke_token_url"></a>

#### revoke_token_url(token, uid) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.use_basic_auth"></a>

#### use_basic_auth() → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.user_data"></a>

#### user_data(access_token: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)

Loads user data from service. Implement in subclass

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.userinfo_url"></a>

#### userinfo_url() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_and_return_id_token"></a>

#### validate_and_return_id_token(id_token, access_token)

Validates the id_token according to the steps at
[http://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation](http://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation).

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_and_return_refresh_id_token"></a>

#### validate_and_return_refresh_id_token(id_token, access_token)

Validate an ID token returned by a refresh request.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_at_hash"></a>

#### validate_at_hash(claims, access_token, key)

Validate the ‘at_hash’ claim according to OpenID Connect specs.

See: [https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken](https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_authorized_party"></a>

#### validate_authorized_party(claims, client_id: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [None](https://docs.python.org/3/builtins/constants.html#None)

Validate the client authorized to use the ID token.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_claims"></a>

#### validate_claims(id_token) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_refresh_id_token_claims"></a>

#### validate_refresh_id_token_claims(previous, current) → [None](https://docs.python.org/3/builtins/constants.html#None)

Validate identity continuity for an ID token refresh.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_required_id_token_claims"></a>

#### validate_required_id_token_claims(claims) → [None](https://docs.python.org/3/builtins/constants.html#None)

Validate claims required in every ID token.

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_temporal_claims"></a>

#### validate_temporal_claims(id_token) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.backends.open_id_connect.OpenIdConnectAuth.validate_userinfo_sub"></a>

#### validate_userinfo_sub(userinfo: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)) → [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)

Validate that UserInfo belongs to the validated ID token subject.

<a id="module-social_core.pipeline.social_auth"></a>

<a id="pipeline"></a>

## Pipeline

<a id="social_core.pipeline.social_auth.associate_by_email"></a>

### social_core.pipeline.social_auth.associate_by_email(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs)

Associate current auth with a user with the same email address in the DB.

This pipeline entry is not 100% secure unless you know that the providers
enabled enforce email verification on their side, otherwise a user can
attempt to take over another user account by using the same (not validated)
email address on some provider.  This pipeline entry is disabled by
default.

<a id="social_core.pipeline.social_auth.associate_user"></a>

### social_core.pipeline.social_auth.associate_user(backend: [BaseAuth](#social_core.backends.base.BaseAuth), uid, user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, social=None, \*args, \*\*kwargs)

<a id="social_core.pipeline.social_auth.auth_allowed"></a>

### social_core.pipeline.social_auth.auth_allowed(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, response, \*args, \*\*kwargs) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.pipeline.social_auth.load_extra_data"></a>

### social_core.pipeline.social_auth.load_extra_data(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, response, uid, user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.pipeline.social_auth.social_details"></a>

### social_core.pipeline.social_auth.social_details(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, response, \*args, \*\*kwargs)

<a id="social_core.pipeline.social_auth.social_uid"></a>

### social_core.pipeline.social_auth.social_uid(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, response, \*args, \*\*kwargs)

<a id="social_core.pipeline.social_auth.social_user"></a>

### social_core.pipeline.social_auth.social_user(backend: [BaseAuth](#social_core.backends.base.BaseAuth), uid, user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs)

<a id="module-social_core.pipeline.user"></a>

<a id="social_core.pipeline.user.create_user"></a>

### social_core.pipeline.user.create_user(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy), details, backend: [BaseAuth](#social_core.backends.base.BaseAuth), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs)

<a id="social_core.pipeline.user.get_username"></a>

### social_core.pipeline.user.get_username(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy), details, backend: [BaseAuth](#social_core.backends.base.BaseAuth), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs)

<a id="social_core.pipeline.user.user_details"></a>

### social_core.pipeline.user.user_details(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy), details, backend: [BaseAuth](#social_core.backends.base.BaseAuth) | [None](https://docs.python.org/3/builtins/constants.html#None), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs) → [None](https://docs.python.org/3/builtins/constants.html#None)

Update user details using data from provider.

<a id="module-social_core.pipeline.mail"></a>

<a id="social_core.pipeline.mail.mail_validation"></a>

### social_core.pipeline.mail.mail_validation(backend: [BaseAuth](#social_core.backends.base.BaseAuth), details, is_new=False, \*args, \*\*kwargs)

<a id="module-social_core.strategy"></a>

<a id="framework-integration"></a>

## Framework integration

<a id="social_core.strategy.BaseStrategy"></a>

### *class* social_core.strategy.BaseStrategy(storage: [type](https://docs.python.org/3/builtins/functions.html#type)[[BaseStorage](#social_core.storage.BaseStorage)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None, tpl: [type](https://docs.python.org/3/builtins/functions.html#type)[[BaseTemplateStrategy](#social_core.strategy.BaseTemplateStrategy)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.strategy.BaseStrategy.ALLOWED_CHARS"></a>

#### ALLOWED_CHARS *= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'*

<a id="social_core.strategy.BaseStrategy.DEFAULT_TEMPLATE_STRATEGY"></a>

#### DEFAULT_TEMPLATE_STRATEGY

alias of [`BaseTemplateStrategy`](#social_core.strategy.BaseTemplateStrategy)

<a id="social_core.strategy.BaseStrategy.SESSION_SAVE_KEY"></a>

#### SESSION_SAVE_KEY *= 'psa_session_id'*

<a id="social_core.strategy.BaseStrategy.absolute_uri"></a>

#### absolute_uri(path: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.strategy.BaseStrategy.authenticate"></a>

#### authenticate(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs) → [UserProtocol](#social_core.storage.UserProtocol) | [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

Trigger the authentication mechanism tied to the current
framework

<a id="social_core.strategy.BaseStrategy.build_absolute_uri"></a>

#### build_absolute_uri(path: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Build absolute URI with given (optional) path

<a id="social_core.strategy.BaseStrategy.clean_authenticate_args"></a>

#### clean_authenticate_args(\*args, \*\*kwargs)

Take authenticate arguments and return a “cleaned” version
of them

<a id="social_core.strategy.BaseStrategy.clean_partial_pipeline"></a>

#### clean_partial_pipeline(token) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.strategy.BaseStrategy.create_user"></a>

#### create_user(\*args, \*\*kwargs)

<a id="social_core.strategy.BaseStrategy.from_session_value"></a>

#### from_session_value(val)

<a id="social_core.strategy.BaseStrategy.get_backend"></a>

#### get_backend(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), redirect_uri: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*\*kwargs) → [BaseAuth](#social_core.backends.base.BaseAuth)

Return a configured backend instance

<a id="social_core.strategy.BaseStrategy.get_backend_class"></a>

#### get_backend_class(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [type](https://docs.python.org/3/builtins/functions.html#type)[[BaseAuth](#social_core.backends.base.BaseAuth)]

Return a configured backend class

<a id="social_core.strategy.BaseStrategy.get_backends"></a>

#### get_backends() → [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

Return configured backends

<a id="social_core.strategy.BaseStrategy.get_disconnect_pipeline"></a>

#### get_disconnect_pipeline(backend: [BaseAuth](#social_core.backends.base.BaseAuth) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.strategy.BaseStrategy.get_language"></a>

#### get_language() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return current language

<a id="social_core.strategy.BaseStrategy.get_pipeline"></a>

#### get_pipeline(backend: [BaseAuth](#social_core.backends.base.BaseAuth) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.strategy.BaseStrategy.get_session_id"></a>

#### get_session_id() → [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)

Return session ID to be used by restore_session.

<a id="social_core.strategy.BaseStrategy.get_setting"></a>

#### get_setting(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Return value for given setting name

<a id="social_core.strategy.BaseStrategy.get_user"></a>

#### get_user(\*args, \*\*kwargs)

<a id="social_core.strategy.BaseStrategy.html"></a>

#### html(content: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol)

Return HTTP response with given content

<a id="social_core.strategy.BaseStrategy.openid_session_dict"></a>

#### openid_session_dict(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → OpenIdSessionWrapper

<a id="social_core.strategy.BaseStrategy.openid_store"></a>

#### openid_store() → OpenIdStore

<a id="social_core.strategy.BaseStrategy.partial_load"></a>

#### partial_load(token: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [PartialMixin](#social_core.storage.PartialMixin) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.strategy.BaseStrategy.partial_pipeline_external_resume_confirmation"></a>

#### partial_pipeline_external_resume_confirmation(backend: [BaseAuth](#social_core.backends.base.BaseAuth), partial: [PartialMixin](#social_core.storage.PartialMixin), request_data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any]) → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.strategy.BaseStrategy.partial_pipeline_external_resume_confirmed"></a>

#### partial_pipeline_external_resume_confirmed(backend: [BaseAuth](#social_core.backends.base.BaseAuth), request_data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), Any]) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.strategy.BaseStrategy.random_string"></a>

#### random_string(length: [int](https://docs.python.org/3/builtins/functions.html#int) = 12, chars: [str](https://docs.python.org/3/builtins/stdtypes.html#str) = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.strategy.BaseStrategy.redirect"></a>

#### redirect(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol)

Return a response redirect to the given URL

<a id="social_core.strategy.BaseStrategy.render_html"></a>

#### render_html(tpl: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, html: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, context: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Render given template or raw html with given context

<a id="social_core.strategy.BaseStrategy.request_data"></a>

#### request_data(merge: [bool](https://docs.python.org/3/builtins/functions.html#bool) = True)

Return current request data (POST or GET)

<a id="social_core.strategy.BaseStrategy.request_get"></a>

#### request_get()

Request GET data

<a id="social_core.strategy.BaseStrategy.request_host"></a>

#### request_host() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return current host value

<a id="social_core.strategy.BaseStrategy.request_is_secure"></a>

#### request_is_secure() → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Is the request using HTTPS?

<a id="social_core.strategy.BaseStrategy.request_path"></a>

#### request_path() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

path of the current request

<a id="social_core.strategy.BaseStrategy.request_port"></a>

#### request_port() → [int](https://docs.python.org/3/builtins/functions.html#int)

Port in use for this request

<a id="social_core.strategy.BaseStrategy.request_post"></a>

#### request_post()

Request POST data

<a id="social_core.strategy.BaseStrategy.restore_session"></a>

#### restore_session(session_id: [str](https://docs.python.org/3/builtins/stdtypes.html#str), kwargs: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [None](https://docs.python.org/3/builtins/constants.html#None)

Restores session and updates kwargs to match it.

This is only called if get_session_id returns a value.

<a id="social_core.strategy.BaseStrategy.send_email_validation"></a>

#### send_email_validation(backend: [BaseAuth](#social_core.backends.base.BaseAuth), email: [str](https://docs.python.org/3/builtins/stdtypes.html#str), partial_token: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [CodeMixin](#social_core.storage.CodeMixin)

<a id="social_core.strategy.BaseStrategy.session_get"></a>

#### session_get(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), default=None)

Return session value for given key

<a id="social_core.strategy.BaseStrategy.session_pop"></a>

#### session_pop(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Pop session value for given key

<a id="social_core.strategy.BaseStrategy.session_set"></a>

#### session_set(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), value)

Set session value for given key

<a id="social_core.strategy.BaseStrategy.session_setdefault"></a>

#### session_setdefault(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), value)

<a id="social_core.strategy.BaseStrategy.setting"></a>

#### setting(name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), default=None, backend: [BaseAuth](#social_core.backends.base.BaseAuth) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

<a id="social_core.strategy.BaseStrategy.storage"></a>

#### *property* storage *: [type](https://docs.python.org/3/builtins/functions.html#type)[[BaseStorage](#social_core.storage.BaseStorage)]*

<a id="social_core.strategy.BaseStrategy.to_session_value"></a>

#### to_session_value(val)

<a id="social_core.strategy.BaseStrategy.validate_email"></a>

#### validate_email(email: [str](https://docs.python.org/3/builtins/stdtypes.html#str), code: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.strategy.BaseTemplateStrategy"></a>

### *class* social_core.strategy.BaseTemplateStrategy(strategy)

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.strategy.BaseTemplateStrategy.render"></a>

#### render(tpl: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, html: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, context: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.strategy.BaseTemplateStrategy.render_string"></a>

#### render_string(html: [str](https://docs.python.org/3/builtins/stdtypes.html#str), context: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.strategy.BaseTemplateStrategy.render_template"></a>

#### render_template(tpl: [str](https://docs.python.org/3/builtins/stdtypes.html#str), context: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.strategy.HttpResponseProtocol"></a>

### *class* social_core.strategy.HttpResponseProtocol(\*args, \*\*kwargs)

Bases: [`Protocol`](https://docs.python.org/3/library/typing.html#typing.Protocol)

<a id="social_core.strategy.HttpResponseProtocol.url"></a>

#### *property* url *: [str](https://docs.python.org/3/builtins/stdtypes.html#str)*

<a id="module-social_core.storage"></a>

Models mixins for Social Auth

<a id="social_core.storage.AssociationMixin"></a>

### *class* social_core.storage.AssociationMixin

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

OpenId account association

<a id="social_core.storage.AssociationMixin.assoc_type"></a>

#### assoc_type *= ''*

<a id="social_core.storage.AssociationMixin.get"></a>

#### *classmethod* get(server_url: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, handle: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Get an Association instance

<a id="social_core.storage.AssociationMixin.handle"></a>

#### handle *= ''*

<a id="social_core.storage.AssociationMixin.issued"></a>

#### issued *= 0*

<a id="social_core.storage.AssociationMixin.lifetime"></a>

#### lifetime *= 0*

<a id="social_core.storage.AssociationMixin.oids"></a>

#### *classmethod* oids(server_url, handle=None)

<a id="social_core.storage.AssociationMixin.openid_association"></a>

#### *classmethod* openid_association(assoc)

<a id="social_core.storage.AssociationMixin.remove"></a>

#### *classmethod* remove(ids_to_delete)

Remove an Association instance

<a id="social_core.storage.AssociationMixin.secret"></a>

#### secret *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)* *= ''*

<a id="social_core.storage.AssociationMixin.server_url"></a>

#### server_url *= ''*

<a id="social_core.storage.AssociationMixin.store"></a>

#### *classmethod* store(server_url, association)

Create an Association instance

<a id="social_core.storage.BaseStorage"></a>

### *class* social_core.storage.BaseStorage

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.storage.BaseStorage.association"></a>

#### association

alias of [`AssociationMixin`](#social_core.storage.AssociationMixin)

<a id="social_core.storage.BaseStorage.code"></a>

#### code

alias of [`CodeMixin`](#social_core.storage.CodeMixin)

<a id="social_core.storage.BaseStorage.is_integrity_error"></a>

#### *classmethod* is_integrity_error(exception) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Check if given exception flags an integrity error in the DB

<a id="social_core.storage.BaseStorage.nonce"></a>

#### nonce

alias of [`NonceMixin`](#social_core.storage.NonceMixin)

<a id="social_core.storage.BaseStorage.partial"></a>

#### partial

alias of [`PartialMixin`](#social_core.storage.PartialMixin)

<a id="social_core.storage.BaseStorage.user"></a>

#### user

alias of [`UserMixin`](#social_core.storage.UserMixin)

<a id="social_core.storage.CodeMixin"></a>

### *class* social_core.storage.CodeMixin

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.storage.CodeMixin.code"></a>

#### code *= ''*

<a id="social_core.storage.CodeMixin.email"></a>

#### email *= ''*

<a id="social_core.storage.CodeMixin.generate_code"></a>

#### *classmethod* generate_code()

<a id="social_core.storage.CodeMixin.get_code"></a>

#### *classmethod* get_code(code)

<a id="social_core.storage.CodeMixin.make_code"></a>

#### *classmethod* make_code(email: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [CodeMixin](#social_core.storage.CodeMixin)

<a id="social_core.storage.CodeMixin.save"></a>

#### *abstractmethod* save()

<a id="social_core.storage.CodeMixin.verified"></a>

#### verified *= False*

<a id="social_core.storage.CodeMixin.verify"></a>

#### verify() → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.storage.NonceMixin"></a>

### *class* social_core.storage.NonceMixin

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

One use numbers

<a id="social_core.storage.NonceMixin.delete"></a>

#### *classmethod* delete(nonce)

Delete a Nonce instance

<a id="social_core.storage.NonceMixin.get"></a>

#### *classmethod* get(server_url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), salt: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Retrieve a Nonce instance

<a id="social_core.storage.NonceMixin.salt"></a>

#### salt *= ''*

<a id="social_core.storage.NonceMixin.server_url"></a>

#### server_url *= ''*

<a id="social_core.storage.NonceMixin.timestamp"></a>

#### timestamp *= 0*

<a id="social_core.storage.NonceMixin.use"></a>

#### *classmethod* use(server_url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), timestamp, salt: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Create a Nonce instance

<a id="social_core.storage.PartialMixin"></a>

### *class* social_core.storage.PartialMixin

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.storage.PartialMixin.args"></a>

#### *property* args

<a id="social_core.storage.PartialMixin.backend"></a>

#### backend *= ''*

<a id="social_core.storage.PartialMixin.data"></a>

#### data *: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]* *= {}*

<a id="social_core.storage.PartialMixin.destroy"></a>

#### *classmethod* destroy(token: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

<a id="social_core.storage.PartialMixin.extend_kwargs"></a>

#### extend_kwargs(values) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.storage.PartialMixin.generate_token"></a>

#### *classmethod* generate_token() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.storage.PartialMixin.kwargs"></a>

#### *property* kwargs

<a id="social_core.storage.PartialMixin.load"></a>

#### *classmethod* load(token: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [PartialMixin](#social_core.storage.PartialMixin) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.storage.PartialMixin.next_step"></a>

#### next_step *: [int](https://docs.python.org/3/builtins/functions.html#int)*

<a id="social_core.storage.PartialMixin.prepare"></a>

#### *classmethod* prepare(backend: [str](https://docs.python.org/3/builtins/stdtypes.html#str), next_step: [int](https://docs.python.org/3/builtins/functions.html#int), data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]) → [PartialMixin](#social_core.storage.PartialMixin)

<a id="social_core.storage.PartialMixin.save"></a>

#### *abstractmethod* save()

<a id="social_core.storage.PartialMixin.store"></a>

#### *classmethod* store(partial: [PartialMixin](#social_core.storage.PartialMixin)) → [PartialMixin](#social_core.storage.PartialMixin)

<a id="social_core.storage.PartialMixin.token"></a>

#### token *= ''*

<a id="social_core.storage.PipelineUserProtocol"></a>

### *class* social_core.storage.PipelineUserProtocol(\*args, \*\*kwargs)

Bases: [`UserProtocol`](#social_core.storage.UserProtocol), [`Protocol`](https://docs.python.org/3/library/typing.html#typing.Protocol)

<a id="social_core.storage.PipelineUserProtocol.is_new"></a>

#### is_new *: [bool](https://docs.python.org/3/builtins/functions.html#bool)*

<a id="social_core.storage.PipelineUserProtocol.social_user"></a>

#### social_user *: [UserMixin](#social_core.storage.UserMixin) | [None](https://docs.python.org/3/builtins/constants.html#None)*

<a id="social_core.storage.UserMixin"></a>

### *class* social_core.storage.UserMixin

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object)

<a id="social_core.storage.UserMixin.ACCESS_TOKEN_EXPIRED_THRESHOLD"></a>

#### ACCESS_TOKEN_EXPIRED_THRESHOLD *= 5*

<a id="social_core.storage.UserMixin.access_token"></a>

#### *property* access_token *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)*

Return access_token stored in extra_data or None

<a id="social_core.storage.UserMixin.access_token_expired"></a>

#### access_token_expired()

Return true / false if access token is already expired

<a id="social_core.storage.UserMixin.allowed_to_disconnect"></a>

#### *classmethod* allowed_to_disconnect(user: [UserProtocol](#social_core.storage.UserProtocol), backend_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), association_id=None) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Return if it’s safe to disconnect the social account for the
given user

<a id="social_core.storage.UserMixin.changed"></a>

#### *classmethod* changed(user: [UserProtocol](#social_core.storage.UserProtocol)) → [None](https://docs.python.org/3/builtins/constants.html#None)

The given user instance is ready to be saved

<a id="social_core.storage.UserMixin.clean_username"></a>

#### *classmethod* clean_username(value: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Clean username removing any unsupported character

<a id="social_core.storage.UserMixin.create_social_auth"></a>

#### *classmethod* create_social_auth(user: [UserProtocol](#social_core.storage.UserProtocol), uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str), provider: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Create a UserSocialAuth instance for given user

<a id="social_core.storage.UserMixin.create_user"></a>

#### *classmethod* create_user(\*args, \*\*kwargs)

Create a user instance

<a id="social_core.storage.UserMixin.disconnect"></a>

#### *classmethod* disconnect(entry)

Disconnect the social account for the given user

<a id="social_core.storage.UserMixin.expiration_datetime"></a>

#### expiration_datetime()

<a id="social_core.storage.UserMixin.expiration_timedelta"></a>

#### expiration_timedelta() → [timedelta](https://docs.python.org/3/library/datetime.html#datetime.timedelta) | [None](https://docs.python.org/3/builtins/constants.html#None)

Return provider session live seconds.

Returns a timedelta ready to use with session.set_expiry().
If provider returns a timestamp instead of session seconds to live, the
timedelta is inferred from current time (using UTC timezone).

Handles three types of expiration data:
- expires_on: Always treated as absolute timestamp
- expires_in: Always treated as relative seconds from auth_time
- expires: Uses heuristic (>63072000 = 2 years) to distinguish timestamp vs relative

<a id="social_core.storage.UserMixin.extra_data"></a>

#### extra_data *: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)]*

<a id="social_core.storage.UserMixin.get_access_token"></a>

#### get_access_token(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)

Returns a valid access token.

<a id="social_core.storage.UserMixin.get_backend"></a>

#### get_backend(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy)) → [type](https://docs.python.org/3/builtins/functions.html#type)[[BaseAuth](#social_core.backends.base.BaseAuth)]

<a id="social_core.storage.UserMixin.get_backend_instance"></a>

#### get_backend_instance(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy)) → [BaseAuth](#social_core.backends.base.BaseAuth) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.storage.UserMixin.get_social_auth"></a>

#### *classmethod* get_social_auth(provider: [str](https://docs.python.org/3/builtins/stdtypes.html#str), uid: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Return UserSocialAuth for given provider and uid

<a id="social_core.storage.UserMixin.get_social_auth_for_user"></a>

#### *classmethod* get_social_auth_for_user(user: [UserProtocol](#social_core.storage.UserProtocol), provider: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, id: [int](https://docs.python.org/3/builtins/functions.html#int) | [None](https://docs.python.org/3/builtins/constants.html#None) = None)

Return all the UserSocialAuth instances for given user

<a id="social_core.storage.UserMixin.get_user"></a>

#### *classmethod* get_user(pk)

Return user instance for given id

<a id="social_core.storage.UserMixin.get_username"></a>

#### *classmethod* get_username(user: [UserProtocol](#social_core.storage.UserProtocol)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Return the username for given user

<a id="social_core.storage.UserMixin.get_users_by_email"></a>

#### *classmethod* get_users_by_email(email: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Return users instances for given email address

<a id="social_core.storage.UserMixin.provider"></a>

#### provider *= ''*

<a id="social_core.storage.UserMixin.refresh_token"></a>

#### refresh_token(strategy: [BaseStrategy](#social_core.strategy.BaseStrategy), \*args, \*\*kwargs) → [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.storage.UserMixin.save"></a>

#### *abstractmethod* save()

<a id="social_core.storage.UserMixin.set_extra_data"></a>

#### set_extra_data(extra_data: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.storage.UserMixin.uid"></a>

#### uid *: [str](https://docs.python.org/3/builtins/stdtypes.html#str)*

<a id="social_core.storage.UserMixin.user"></a>

#### user *: [UserProtocol](#social_core.storage.UserProtocol)*

<a id="social_core.storage.UserMixin.user_exists"></a>

#### *classmethod* user_exists(\*args, \*\*kwargs) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Return True/False if a User instance exists with the given arguments.
Arguments are directly passed to filter() manager method.

<a id="social_core.storage.UserMixin.user_model"></a>

#### *classmethod* user_model() → [type](https://docs.python.org/3/builtins/functions.html#type)[[UserProtocol](#social_core.storage.UserProtocol)]

Return the user model

<a id="social_core.storage.UserMixin.username_max_length"></a>

#### *classmethod* username_max_length() → [int](https://docs.python.org/3/builtins/functions.html#int)

Return the max length for username

<a id="social_core.storage.UserProtocol"></a>

### *class* social_core.storage.UserProtocol(\*args, \*\*kwargs)

Bases: [`Protocol`](https://docs.python.org/3/library/typing.html#typing.Protocol)

<a id="social_core.storage.UserProtocol.id"></a>

#### *property* id *: [int](https://docs.python.org/3/builtins/functions.html#int)*

<a id="social_core.storage.UserProtocol.is_active"></a>

#### *property* is_active *: [bool](https://docs.python.org/3/builtins/functions.html#bool) | Callable[[], [bool](https://docs.python.org/3/builtins/functions.html#bool)]*

<a id="social_core.storage.UserProtocol.is_authenticated"></a>

#### *property* is_authenticated *: [bool](https://docs.python.org/3/builtins/functions.html#bool) | Callable[[], [bool](https://docs.python.org/3/builtins/functions.html#bool)]*

<a id="social_core.storage.UserProtocol.username"></a>

#### *property* username *: [str](https://docs.python.org/3/builtins/stdtypes.html#str)*

<a id="module-social_core.exceptions"></a>

<a id="errors-and-utilities"></a>

## Errors and utilities

<a id="social_core.exceptions.AuthAlreadyAssociated"></a>

### *exception* social_core.exceptions.AuthAlreadyAssociated(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

A different user has already associated the target social account

<a id="social_core.exceptions.AuthCanceled"></a>

### *exception* social_core.exceptions.AuthCanceled(\*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Auth process was canceled by user.

<a id="social_core.exceptions.AuthConnectionError"></a>

### *exception* social_core.exceptions.AuthConnectionError(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Connection error duing authentication.

<a id="social_core.exceptions.AuthException"></a>

### *exception* social_core.exceptions.AuthException(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Auth process exception.

<a id="social_core.exceptions.AuthFailed"></a>

### *exception* social_core.exceptions.AuthFailed(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Auth process failed for some reason.

<a id="social_core.exceptions.AuthForbidden"></a>

### *exception* social_core.exceptions.AuthForbidden(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Authentication for this user is forbidden

<a id="social_core.exceptions.AuthInvalidParameter"></a>

### *exception* social_core.exceptions.AuthInvalidParameter(backend: [BaseAuth](#social_core.backends.base.BaseAuth), parameter: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs)

Bases: [`AuthMissingParameter`](#social_core.exceptions.AuthMissingParameter)

Invalid value for parameter to start or complete the process.

<a id="social_core.exceptions.AuthMissingParameter"></a>

### *exception* social_core.exceptions.AuthMissingParameter(backend: [BaseAuth](#social_core.backends.base.BaseAuth), parameter: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Missing parameter needed to start or complete the process.

<a id="social_core.exceptions.AuthNotImplementedParameter"></a>

### *exception* social_core.exceptions.AuthNotImplementedParameter(backend: [BaseAuth](#social_core.backends.base.BaseAuth), parameter: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs)

Bases: [`AuthMissingParameter`](#social_core.exceptions.AuthMissingParameter)

Optional parameter not implemented to start or complete the process.

<a id="social_core.exceptions.AuthReauthenticationRequired"></a>

### *exception* social_core.exceptions.AuthReauthenticationRequired(backend: [BaseAuth](#social_core.backends.base.BaseAuth))

Bases: [`AuthTokenError`](#social_core.exceptions.AuthTokenError)

The stored authentication context cannot establish token continuity.

<a id="social_core.exceptions.AuthStateForbidden"></a>

### *exception* social_core.exceptions.AuthStateForbidden(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

State parameter is incorrect.

<a id="social_core.exceptions.AuthStateMissing"></a>

### *exception* social_core.exceptions.AuthStateMissing(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

State parameter is incorrect.

<a id="social_core.exceptions.AuthTokenError"></a>

### *exception* social_core.exceptions.AuthTokenError(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Auth token error.

<a id="social_core.exceptions.AuthTokenRevoked"></a>

### *exception* social_core.exceptions.AuthTokenRevoked(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

User revoked the access_token in the provider.

<a id="social_core.exceptions.AuthUnknownError"></a>

### *exception* social_core.exceptions.AuthUnknownError(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Unknown auth process error.

<a id="social_core.exceptions.AuthUnreachableProvider"></a>

### *exception* social_core.exceptions.AuthUnreachableProvider(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

Cannot reach the provider

<a id="social_core.exceptions.DefaultStrategyMissingError"></a>

### *exception* social_core.exceptions.DefaultStrategyMissingError

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Default strategy is not configured.

<a id="social_core.exceptions.InvalidEmail"></a>

### *exception* social_core.exceptions.InvalidEmail(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*args, \*\*kwargs)

Bases: [`AuthException`](#social_core.exceptions.AuthException)

<a id="social_core.exceptions.InvalidExpiryValue"></a>

### *exception* social_core.exceptions.InvalidExpiryValue(field_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), value: [object](https://docs.python.org/3/builtins/functions.html#object))

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Invalid expiry value in extra_data.

<a id="social_core.exceptions.MissingBackend"></a>

### *exception* social_core.exceptions.MissingBackend(backend_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Bases: [`WrongBackend`](#social_core.exceptions.WrongBackend)

<a id="social_core.exceptions.NotAllowedToDisconnect"></a>

### *exception* social_core.exceptions.NotAllowedToDisconnect

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

User is not allowed to disconnect it’s social account.

<a id="social_core.exceptions.SocialAuthBaseException"></a>

### *exception* social_core.exceptions.SocialAuthBaseException

Bases: [`ValueError`](https://docs.python.org/3/builtins/exceptions.html#ValueError)

Base class for pipeline exceptions.

<a id="social_core.exceptions.SocialAuthImproperlyConfiguredError"></a>

### *exception* social_core.exceptions.SocialAuthImproperlyConfiguredError

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Raised when configuration is invalid.

<a id="social_core.exceptions.StrategyMissingBackendError"></a>

### *exception* social_core.exceptions.StrategyMissingBackendError

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Strategy storage backend is not configured.

<a id="social_core.exceptions.StrategyMissingFeatureError"></a>

### *exception* social_core.exceptions.StrategyMissingFeatureError(strategy_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str), feature_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

Strategy does not support this.

<a id="social_core.exceptions.WrongBackend"></a>

### *exception* social_core.exceptions.WrongBackend(backend_name: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

Bases: [`SocialAuthBaseException`](#social_core.exceptions.SocialAuthBaseException)

<a id="module-social_core.utils"></a>

<a id="social_core.utils.PartialPipelineResult"></a>

### *class* social_core.utils.PartialPipelineResult(partial: 'PartialMixin | None' = None, response: 'HttpResponseProtocol | None' = None, halt: 'bool' = False)

<a id="social_core.utils.PartialPipelineResult.halt"></a>

#### halt *: [bool](https://docs.python.org/3/builtins/functions.html#bool)* *= False*

<a id="social_core.utils.PartialPipelineResult.partial"></a>

#### partial *: [PartialMixin](#social_core.storage.PartialMixin) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.utils.PartialPipelineResult.response"></a>

#### response *: [HttpResponseProtocol](#social_core.strategy.HttpResponseProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.utils.PartialPipelineSelection"></a>

### *class* social_core.utils.PartialPipelineSelection(token: 'str | None' = None, owns_token: 'bool' = False, pending_resume: 'bool' = False)

<a id="social_core.utils.PartialPipelineSelection.owns_token"></a>

#### owns_token *: [bool](https://docs.python.org/3/builtins/functions.html#bool)* *= False*

<a id="social_core.utils.PartialPipelineSelection.pending_resume"></a>

#### pending_resume *: [bool](https://docs.python.org/3/builtins/functions.html#bool)* *= False*

<a id="social_core.utils.PartialPipelineSelection.token"></a>

#### token *: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)* *= None*

<a id="social_core.utils.append_slash"></a>

### social_core.utils.append_slash(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Make sure we append a slash at the end of the URL otherwise we
have issues with urljoin Example:
>>> urlparse.urljoin(’[http://www.example.com/api/v3](http://www.example.com/api/v3)’, ‘user/1/’)
‘[http://www.example.com/api/user/1/](http://www.example.com/api/user/1/)’

<a id="social_core.utils.build_absolute_uri"></a>

### social_core.utils.build_absolute_uri(host_url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), path: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Build absolute URI with given (optional) path

<a id="social_core.utils.cache"></a>

### *class* social_core.utils.cache(ttl: [int](https://docs.python.org/3/builtins/functions.html#int))

Cache decorator that caches the return value of a method for a
specified time.

It maintains a cache per class and method arguments, so subclasses have a
different cache entry for the same cached method.

<a id="social_core.utils.cache.cache"></a>

#### cache *: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[type](https://docs.python.org/3/builtins/functions.html#type), [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[Any](https://docs.python.org/3/library/typing.html#typing.Any), ...], [tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[tuple](https://docs.python.org/3/builtins/stdtypes.html#tuple)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [Any](https://docs.python.org/3/library/typing.html#typing.Any)], ...]], [Any](https://docs.python.org/3/library/typing.html#typing.Any)]*

<a id="social_core.utils.constant_time_compare"></a>

### social_core.utils.constant_time_compare(val1: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes), val2: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [bytes](https://docs.python.org/3/builtins/stdtypes.html#bytes)) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Compare two values and prevent timing attacks for cryptographic use.

<a id="social_core.utils.drop_lists"></a>

### social_core.utils.drop_lists(value)

<a id="social_core.utils.first"></a>

### social_core.utils.first(func, items)

Return the first item in the list for what func returns True

<a id="social_core.utils.get_allowed_redirect_schemes"></a>

### social_core.utils.get_allowed_redirect_schemes(backend: [BaseAuth](#social_core.backends.base.BaseAuth)) → [set](https://docs.python.org/3/builtins/stdtypes.html#set)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

<a id="social_core.utils.get_querystring"></a>

### social_core.utils.get_querystring(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str))

<a id="social_core.utils.get_strategy"></a>

### social_core.utils.get_strategy(strategy: [str](https://docs.python.org/3/builtins/stdtypes.html#str), storage: [str](https://docs.python.org/3/builtins/stdtypes.html#str), \*args, \*\*kwargs) → [BaseStrategy](#social_core.strategy.BaseStrategy)

<a id="social_core.utils.handle_http_errors"></a>

### social_core.utils.handle_http_errors(func)

<a id="social_core.utils.is_private_use_redirect"></a>

### social_core.utils.is_private_use_redirect(value: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None), allowed_schemes: Collection[[str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

Whether `value` uses a non-web scheme that has been explicitly allowed.

URI construction helpers such as `build_absolute_uri` only preserve http
and https, so callers must check this before turning a redirect candidate
into an absolute URI.

<a id="social_core.utils.is_url"></a>

### social_core.utils.is_url(value: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None), allowed_schemes: Collection[[str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.utils.module_member"></a>

### social_core.utils.module_member(name)

<a id="social_core.utils.normalize_redirect_schemes"></a>

### social_core.utils.normalize_redirect_schemes(schemes: Collection[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]) → [set](https://docs.python.org/3/builtins/stdtypes.html#set)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)]

URI schemes are case-insensitive, and urlparse lowercases them.

<a id="social_core.utils.parse_qs"></a>

### social_core.utils.parse_qs(value)

Like urlparse.parse_qs but transform list values to single items

<a id="social_core.utils.partial_pipeline_data"></a>

### social_core.utils.partial_pipeline_data(backend: [BaseAuth](#social_core.backends.base.BaseAuth), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, partial_token: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs) → [PartialMixin](#social_core.storage.PartialMixin) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.utils.partial_pipeline_result"></a>

### social_core.utils.partial_pipeline_result(backend: [BaseAuth](#social_core.backends.base.BaseAuth), user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, partial_token: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None) = None, \*args, \*\*kwargs) → [PartialPipelineResult](#social_core.utils.PartialPipelineResult)

<a id="social_core.utils.sanitize_redirect"></a>

### social_core.utils.sanitize_redirect(hosts: [list](https://docs.python.org/3/builtins/stdtypes.html#list)[[str](https://docs.python.org/3/builtins/stdtypes.html#str)], redirect_to: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | Any, allowed_schemes: Collection[[str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None) = None) → [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)

Given a list of hostnames and an untrusted URL to redirect to,
this method tests it to make sure it isn’t garbage/harmful
and returns it, else returns None, similar as how’s it done
on django.contrib.auth.views.

`allowed_schemes` defaults to http and https. Deployments that need to
hand control back to a native application can add a private-use URI scheme
(RFC 8252) through the `ALLOWED_REDIRECT_SCHEMES` setting.

<a id="social_core.utils.setting_name"></a>

### social_core.utils.setting_name(\*names: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.utils.setting_url"></a>

### social_core.utils.setting_url(backend: [BaseAuth](#social_core.backends.base.BaseAuth), \*names: [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str) | [None](https://docs.python.org/3/builtins/constants.html#None)

<a id="social_core.utils.slugify"></a>

### social_core.utils.slugify(value)

Converts to lowercase, removes non-word characters (alphanumerics
and underscores) and converts spaces to hyphens. Also strips leading
and trailing whitespace.

<a id="social_core.utils.to_setting_name"></a>

### social_core.utils.to_setting_name(\*names: [str](https://docs.python.org/3/builtins/stdtypes.html#str)) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

<a id="social_core.utils.url_add_parameters"></a>

### social_core.utils.url_add_parameters(url: [str](https://docs.python.org/3/builtins/stdtypes.html#str), params: [dict](https://docs.python.org/3/builtins/stdtypes.html#dict)[[str](https://docs.python.org/3/builtins/stdtypes.html#str), [str](https://docs.python.org/3/builtins/stdtypes.html#str)] | [None](https://docs.python.org/3/builtins/constants.html#None), \_unquote_query: [bool](https://docs.python.org/3/builtins/functions.html#bool) = False) → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Adds parameters to URL, parameter will be repeated if already present

<a id="social_core.utils.user_agent"></a>

### social_core.utils.user_agent() → [str](https://docs.python.org/3/builtins/stdtypes.html#str)

Builds a simple User-Agent string to send in requests

<a id="social_core.utils.user_is_active"></a>

### social_core.utils.user_is_active(user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.utils.user_is_authenticated"></a>

### social_core.utils.user_is_authenticated(user: [UserProtocol](#social_core.storage.UserProtocol) | [None](https://docs.python.org/3/builtins/constants.html#None)) → [bool](https://docs.python.org/3/builtins/functions.html#bool)

<a id="social_core.utils.wrap_access_token_error"></a>

### social_core.utils.wrap_access_token_error(backend: [BaseAuth](#social_core.backends.base.BaseAuth))
