*/
public function processAcsResponse(?string $requestId): ?User
{
- if (is_null($requestId)) {
- throw new SamlException(trans('errors.saml_invalid_response_id'));
- }
-
$toolkit = $this->getToolkit();
$toolkit->processResponse($requestId);
$errors = $toolkit->getErrors();
/**
* Extract the details of a user from a SAML response.
- * @throws SamlException
*/
public function getUserDetails(string $samlID, $samlAttributes): array
{
$emailAttr = $this->config['email_attribute'];
$externalId = $this->getExternalId($samlAttributes, $samlID);
- $email = $this->getSamlResponseAttribute($samlAttributes, $emailAttr, null);
- if ($email === null) {
- throw new SamlException(trans('errors.saml_no_email_address'));
- }
+ $defaultEmail = filter_var($samlID, FILTER_VALIDATE_EMAIL) ? $samlID : null;
+ $email = $this->getSamlResponseAttribute($samlAttributes, $emailAttr, $defaultEmail);
return [
'external_id' => $externalId,
if ($this->config['dump_user_details']) {
throw new JsonDebugException([
+ 'id_from_idp' => $samlID,
'attrs_from_idp' => $samlAttributes,
'attrs_after_parsing' => $userDetails,
]);
}
+ if ($userDetails['email'] === null) {
+ throw new SamlException(trans('errors.saml_no_email_address'));
+ }
+
if ($isLoggedIn) {
throw new SamlException(trans('errors.saml_already_logged_in'), '/login');
}
* [Laravel IDE helper](https://github.com/barryvdh/laravel-ide-helper)
* [WKHTMLtoPDF](http://wkhtmltopdf.org/index.html)
* [Draw.io](https://github.com/jgraph/drawio)
-* [Laravel Stats](https://github.com/stefanzweifel/laravel-stats)
\ No newline at end of file
+* [Laravel Stats](https://github.com/stefanzweifel/laravel-stats)
+* [OneLogin's SAML PHP Toolkit](https://github.com/onelogin/php-saml)
\ No newline at end of file