Как вручную зарегистрировать пользователя в Symfony 1.4 с помощью sfGuardPlugin

Иногда, будучи администратором приложения, созданного с помощью Symfony 1.4, вам может потребоваться доступ к учетным записям пользователя для воспроизведения ошибок и проверки причин сбоя в случае, если текущих мер по отладке недостаточно. По понятным причинам, если ваша система не является частной и в ней много пользователей, вы не сможете запросить у них пароль, как это было бы очевидно. нарушая право на неприкосновенность частной жизни. Вместо этого следует учитывать логику вашей системы. Есть и другие случаи, когда вы используете токен доступа, например, в настольных приложениях, когда пользователь автоматически входит в систему, когда в браузере открыт веб-URL, это также один из тех случаев, когда вам также необходимо знать, как выполнить вход. вручную пользователя, не зная его пароль.

В качестве известной среды, хотя Symfony 1.4 является устаревшей версией, стандарты никогда не устаревают, поэтому существует очевидный способ подписать пользователя, не зная его пароля, а только его идентификатор в базе данных, в частности всю информацию о строке пользователя в таблица sf_guard_user. В этой статье мы покажем вам короткий фрагмент, как вы можете следовать этому поведению в нескольких строках кода.

Заметка

Не конкретно идентификатор, так как вы можете найти пользователя в таблице, а также использовать его имя пользователя, адрес электронной почты и т. Д. Здесь важно отметить, что вы предоставляете объект Doctrine для sf_guard_user Таблица.

пример

Поскольку способ использования этой логики может варьироваться в каждом проекте, мы будем использовать простой фрагмент PHP, который описывает, как логика работает в контроллере (actions.class.php) файл. Первое, что вы можете сделать, это выйти из системы текущего пользователя (в случае, если он есть). Далее вам нужно найти объект базы данных, в частности, тот, с которым вы хотите войти, из базы данных. Метод входа sfGuard ожидает объект Doctrine, который содержит сущность вашего пользователя, это полностью зависит от вас, потому что, как уже упоминалось, вы можете найти пользователя по его идентификатору, имени пользователя, электронной почте или другому пользовательскому свойству. Затем получите текущий сеанс, получив текущего пользователя, который в этом случае пуст после его выхода, и вызовите метод входа, предоставив 2 обязательных аргумента. Первый аргумент — это Doctrine User Object пользователя, которому вы хотите войти, а в качестве второго аргумента — логическая переменная, которая определяет опцию входа в систему «Запомнить меня» в форме входа. Обычно, когда мы регистрируем его вручную с контроллера, для него должно быть установлено значение false:

getUser()->signOut();
// 2. Obtain an user object to login
// The $userToLogin is a doctrine object of an user in the `sf_guard_user` table of the sfGuardPlugin
// so the logic of how to retrieve the user is up to you !
$userId = 1;
$userToLogin = Doctrine_Core::getTable('sfGuardUser')->find($userId);
// 3. Retrieve the session and force login of the providen user object
// the second argument indicated wheter the user should be remembered or not
// (usually false) if this is done manually
$this->getUser()->signin($userToLogin, false);
// Now you can redirect the user to some page where you want to !
$this->redirect('@homepage');

Наконец, как показано, вы можете перенаправить пользователя на другую страницу в соответствии с его учетными данными или просто отправить его на контроллер, который уже делает это для вас.

Ссылка на основную публикацию
Adblock
detector