Создание учетных записей пользователей с помощью ZfcUser в ZF2

Я хочу создавать учетные записи пользователей в Zend Framework 2 с произвольным образом ZfcUser, чтобы затем отправить их по электронной почте. пользователю либо со ссылкой для активации, либо с некоторыми временными учетными данными. Я не уверен, можно ли расширить ZfcUser, чтобы сделать это безопасно, поэтому я ищу помощь и предложения.

Мне нужно сделать это в моем приложении для функции рекомендательного письма. Он работает, когда существующий пользователь (кто-то, кто зарегистрировался с помощью ZfcUser «обычным» способом) запрашивает рекомендательное письмо от кого-то, предоставляя адрес электронной почты для этого человека. В этот момент я хотел бы создать учетную запись с помощью ZfcUser с указанным адресом электронной почты и уведомить человека о том, что кто-то запросил у него рекомендательное письмо и что он должен войти в систему и заполнить его.

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

Я должен отметить, что в настоящее время я также использую CdliTwoStageSignup в сочетании с ZfcUser. Мне не обязательно использовать его для этого, но он в сумке для инструментов.

Я думаю, что здесь может быть полезен флаг ZfcUser 'state' но это не самая трудная часть того, что я пытаюсь сделать.

Я также нашел еще одну подсказку о том, как это сделать, в вики ZfcUser на Github.

Я ищу техническую помощь в выполнении этого с помощью ZfcUser, но я определенно открыт для дизайнерских идей или улучшений в целом.


person dperjar    schedule 08.04.2013    source источник
comment
Ну, вы называете это: это, конечно, возможно, но довольно сложно и не просто легко сделать. Флаг состояния есть, но вы также можете расширить сущность пользователя. Все зависит от вас, как это сделать, но быстро сделать это здесь, на SO, не так просто;)   -  person Sam    schedule 08.04.2013
comment
Более простым способом может быть отдельная таблица, в которой вы храните эти запросы по электронной почте. Затем вы можете просто отправить электронное письмо на адрес электронной почты, и они смогут нормально зарегистрироваться. Вы сможете получать все их запросы, поскольку они привязаны к одному и тому же адресу электронной почты.   -  person Aydin Hassan    schedule 08.04.2013
comment
Спасибо @Сэм. Я понимаю, что здесь нужно пройти несколько уровней, но я больше ищу предложения о том, как подойти к этому, а не код для полного решения. Сейчас я рассмотрю возможность расширения пользовательского объекта.   -  person dperjar    schedule 08.04.2013
comment
@AydinHassan это возможно - спасибо за предложение. Это может быть более практично, чем то, что я имел в виду. Думаю, я думал о том, чтобы иметь учетную запись, чтобы все запросы были связаны при их создании, но, в конце концов, я полагаю, это не имеет большого значения. Мне просто нужно просмотреть таблицу запросов и найти все ожидающие запросы, когда пользователь приступит к созданию учетной записи.   -  person dperjar    schedule 08.04.2013


Ответы (1)


Если кто-то ищет, как создать общего пользователя, который может быть аутентифицирован с помощью ZfcUser, это просто вопрос создания нового пользователя, использования $bcrypt для преобразования открытого текста пароля в хэш и сохранения всего этого в вашей пользовательской таблице. Основы изложены ниже:

$newUser = new User();
$newUser->user_id = 'newUserId';
$newUser->email = '[email protected]';
$password = 'newUserPassword'//This is extremely bad form, don't do it. You don't want any passwords hanging out in plaintext.

$bcrypt = new Bcrypt();
$bcrypt->setCost(14); 
$newUser->password = $bcrypt->create($password);
$userTable->saveUser($newUser);

Стоимость Bcrypt, которую я использовал здесь, составляла 14. Вы можете использовать все, что подходит для вашего приложения, но было бы неплохо получить ваши настройки из файла конфигурации ZfcUser. Вы также можете использовать другое значение, и Bcrypt справится с ним без проблем.

Я не предлагаю создавать учетные записи и оставлять пароли открытым текстом в вашем коде, как я делаю в этом примере. Обычно вы получаете пользовательский ввод и сразу же хешируете его, не сохраняя.

Для краткости я упустил некоторые важные элементы, такие как состояние пользователя и такие параметры, как имя пользователя и отображаемое имя. Не забывайте о роли пользователя, если вы также используете BjyAuthorize.

person dperjar    schedule 05.05.2013
comment
Что, если я захочу добавить этот код в сценарий, который можно будет выполнить из командной строки и запросить имя пользователя, адрес электронной почты и пароль? Как бы вы сделали это в Zend? - person Samo; 03.03.2015