Symfony 4.0
Bu süreç symfony 3'ten 4'e değişmedi, ancak burada yeni önerilen AbstractController'ın kullanıldığı bir örnek var. Hem hizmetler security.token_storage
hem de session
hizmetler ana getSubscribedServices
yönteme kaydedilir, böylece bunları denetleyicinize eklemeniz gerekmez.
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use YourNameSpace\UserBundle\Entity\User;
class LoginController extends AbstractController{
public function registerAction()
{
$user = //Handle getting or creating the user entity likely with a posted form
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->container->get('security.token_storage')->setToken($token);
$this->container->get('session')->set('_security_main', serialize($token));
// The user is now logged in, you can redirect or do whatever.
}
}
Symfony 2.6.x - Symfony 3.0.x
Symfony 2.6'dan itibaren security.context
, lehine kullanımdan kaldırılmıştır security.token_storage
. Denetleyici artık basitçe:
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use YourNameSpace\UserBundle\Entity\User;
class LoginController extends Controller{
public function registerAction()
{
$user = //Handle getting or creating the user entity likely with a posted form
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
}
}
Bu kullanımdan kaldırılmış olsa security.context
da, geriye dönük uyumlu olacak şekilde yapıldığı için kullanmaya devam edebilirsiniz . Symfony 3 için güncellemeye hazır olun
Güvenlik için 2.6 değişiklikleri hakkında daha fazla bilgiyi buradan okuyabilirsiniz: https://github.com/symfony/symfony/blob/2.6/UPGRADE-2.6.md
Symfony 2.3.x
Bunu symfony 2.3'te başarmak için artık belirteci güvenlik bağlamında ayarlayamazsınız. Ayrıca jetonu oturuma kaydetmeniz gerekir.
Aşağıdaki gibi bir güvenlik duvarına sahip bir güvenlik dosyası varsayarsak:
// app/config/security.yml
security:
firewalls:
main:
//firewall settings here
Ve benzer bir denetleyici eylemi:
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use YourNameSpace\UserBundle\Entity\User;
class LoginController extends Controller{
public function registerAction()
{
$user = //Handle getting or creating the user entity likely with a posted form
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.context')->setToken($token);
$this->get('session')->set('_security_main',serialize($token));
//Now you can redirect where ever you need and the user will be logged in
}
}
Belirteç oluşturmak için bir UsernamePasswordToken
, Bu 4 parametreyi kabul eder: Kullanıcı Varlığı, Kullanıcı Kimlik Bilgileri, Güvenlik Duvarı Adı, Kullanıcı Rolleri. Jetonun geçerli olması için kullanıcı kimlik bilgilerini sağlamanıza gerek yoktur.
security.context
Hemen yeniden yönlendirecekseniz belirteci üzerinde ayarlamanın gerekli olduğundan% 100 emin değilim . Ama incitmiş gibi görünmüyor, bu yüzden onu bıraktım.
Sonra önemli kısım, oturum değişkeninin ayarlanması. Değişkenler adlandırma kuralı olan _security_
bu durumda, güvenlik duvarı adından main
verme_security_main