Symfony 4.0
Proses ini tidak berubah dari symfony 3 ke 4 tetapi berikut adalah contoh penggunaan AbstractController yang baru direkomendasikan. Baik security.token_storage
dan session
layanan terdaftar di induk getSubscribedServices
metode sehingga Anda tidak perlu menambah orang-orang di controller Anda.
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
Pada symfony 2.6 security.context
sudah usang dan tidak mendukung security.token_storage
. Pengontrol sekarang dapat menjadi:
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));
}
}
Meskipun ini sudah usang, Anda masih dapat menggunakan security.context
karena telah dibuat agar kompatibel dengan versi sebelumnya. Bersiaplah untuk memperbaruinya untuk Symfony 3
Anda dapat membaca lebih lanjut tentang 2.6 perubahan untuk keamanan di sini: https://github.com/symfony/symfony/blob/2.6/UPGRADE-2.6.md
Symfony 2.3.x
Untuk melakukannya di symfony 2.3 Anda tidak bisa lagi hanya mengatur token dalam konteks keamanan. Anda juga perlu menyimpan token ke sesi tersebut.
Dengan asumsi file keamanan dengan firewall seperti:
// app/config/security.yml
security:
firewalls:
main:
//firewall settings here
Dan tindakan pengontrol serupa juga:
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
}
}
Untuk pembuatan token Anda akan ingin membuat UsernamePasswordToken
, Ini menerima 4 parameter: Entitas Pengguna, Kredensial Pengguna, Nama Firewall, Peran Pengguna. Anda tidak perlu memberikan kredensial pengguna agar token menjadi valid.
Saya tidak 100% yakin bahwa menyetel token pada security.context
diperlukan jika Anda hanya akan langsung mengalihkan. Tapi sepertinya tidak sakit jadi saya tinggalkan.
Kemudian bagian yang penting, pengaturan variabel sesi. Konvensi penamaan variabel _security_
diikuti dengan nama firewall Anda, dalam hal ini main
pembuatan_security_main