我创建了一个管理包。我正在使用自己的逻辑来检查用户是否已登录。但如果用户未登录则不会重定向。我每次尝试通过构造函数调用名为isLoggedIn()函数的索引操作时调试代码,但重定向部分在登录后无法正常工作。
我的控制器代码是
<?php
namespace Nitin\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Bitcoin\AdminBundle\BitcoinAdminBundle;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
class AdminController extends Controller {
public $session;
public $container;
public $pageData;
public function __construct() {
$this->container = NitinAdminBundle::getContainer();
$this->session = $this->container->get('session');
$this->isLoggedIn();
}
public function indexAction(Request $request) { //die(''.__LINE__);
return $this->render('NitinAdminBundle:Default:index.html.twig');
}
public function isLoggedIn() {
$isLoggedin = $this->session->get('loggedIn', FALSE);
if (FALSE === $isLoggedin) {
return $this->redirect($this->generateUrl('nitin_admin_login'));
}
return false;
}
public function logoutAction() {
$this->session->invalidate();
return $this->redirect($this->generateUrl('nitin_admin_login'));
}
}
答案 0 :(得分:1)
您还可以做一件事,而不是写header();
public function isLoggedIn() {
$isLoggedin = $this->session->get('loggedIn', FALSE);
if (FALSE === $isLoggedin) {
$this->redirect($this->generateUrl('nitin_admin_login'))->sendHeaders();
}
return false;
}
sendHeaders()
是Symfony\Component\HttpFoundation\Response;
的方法。
答案 1 :(得分:0)
使用redirect()
方法时,它会返回RedirectResponse
的实例,并在操作方法中使用。 (虽然构造函数方法中的重定向不是最佳实践),但此代码可以正常工作:
protected function isLoggedIn()
{
$isLoggedin = $this->session->get('loggedIn', false);
if (false === $isLoggedin) {
header('Location: ' . $this->generateUrl('nitin_admin_login'));
exit;
}
}
正如@Maerlyn所说,你必须使用安全组件。