Closed 01e9 closed 7 years ago
Not needed anymore, it was working wrongly when response contained email attribute, email was returned instead of persistent id. The fixed/simplified version:
class PersistentUsernameMapper extends SimpleUsernameMapperBase
{
const NAME_ID_FORMAT = SamlConstants::NAME_ID_FORMAT_PERSISTENT;
/**
* @param string[] $attributes
*/
public function __construct(array $attributes)
{
parent::__construct($attributes);
}
/**
* @param Response $response
*
* @return string|null
*/
public function getUsername(Response $response)
{
foreach ($response->getAllAssertions() as $assertion) {
$username = $this->getUsernameFromAssertion($assertion);
if ($username) {
return $username;
}
}
return null;
}
/**
* @param Assertion $assertion
*
* @return null|string
*/
protected function getUsernameFromAssertion(Assertion $assertion)
{
if ($assertion->getSubject() &&
$assertion->getSubject()->getNameID() &&
$assertion->getSubject()->getNameID()->getValue() &&
$assertion->getSubject()->getNameID()->getFormat() === self::NAME_ID_FORMAT
) {
return $assertion->getSubject()->getNameID()->getValue();
}
return null;
}
}
Easier to extend
I extended it in my child bundle and it currently duplicates
$attributes
because ofprivate