Allows definition of multiple authentication ways with unified API (for Nette Framework)
Nette 2.0 or newer
None, really :).
Write your authenticators, but don't make them implement Nette\Security\IAuthenticator
. On the other hand, request Nette\Security\User
service as dependency.
class CredentialsAuthenticator
{
/** @var Nette\Security\User */
private $user;
public function __construct(Nette\Security\User $user)
{
$this->user = $user;
}
}
Now write your login method. Be creative!
public function login($username, $password)
{
// ... your logic
$this->user->login(new Identity( ... ));
}
Register your authenticator as service:
services:
- CredentialsAuthenticator
And you're done.
For authentication, you should use the specific authenticator:
class SignPresenter extends Nette\Application\UI\Presenter
{
/** @var CredentialsAuthenticator @inject */
public $credentialsAuthenticator;
// ...
public function processLoginForm($form)
{
$values = $form->getValues();
$this->credentialsAuthenticator->login($values->username, $values->password);
}
}
The point is: use normal dependencies and wrap Nette\Security\User
in them, not the other way around.