Подскажите как лучше сделать. На сайт есть два разных входа.
Стандартный:
регистрация (таблица users)
активация через ссылку по мылу
логин через форму (UserIdentity->authenticate, обработка ошибок, затем …user->login($userIdentity))
Дополнительный (через openID):
авторизация(вход) через внешний сервикс (openID), в процессе входа я проверяю нет ли таково юзера среди обычных (users) если нет, то создаю юзера в отдельной таблице (open_users). Далее OpenUserIdentity->authenticate, затем user->login($openUserIdentity))
Для тех, кто только что залогинился через openID нужно еще пройти доп.регистрацию, вбить мыло и активировать уже полноценный аккаунт (т. е. создать пользователя в основной таблице юзеров_.
Чота мне ни как не придумать как это реализовать наиболее красиво…
Если логиню во втором случае то user->id не пустой и юзер как бы уэе не гость, но при этом это ID не из основной таблицы юзеров и соответственно WebUser работает непойми как …
Не, я конечно сделал setState(‘openUser’) = true | false и нафтыкал if-ов в контроллеры и модели. Работает, но так не нравится.
Когда приходилось решать подобную задачу, я создавал запись в таблице пользователей когда кто-то входил через OpenId, записывал в неё этот openId, что бы в дальнейшем можно было сопоставить openId с id-в таблице пользователей.
В случае, когда необходима до-регистрация, я просто создавал поле users.not_full_anketa и отображал этому пользователю приглашения проследовать на форму и заполнить там некоторые поля.
Т.е. суть в том, что бы сразу создавать запись в таблице пользователей и не мучатся с эмуляциями "это вроде и пользователь, но не из таблицы пользователей".
Вопрос понял правильно. Я почти так и делаю за исключением того, что я не создаю сразу пользователя в основной таблице юзеров. Например если у пользователя будет несколько разных ‘open’ аккаунтов и он захочет их “прявязать” в одному основному. то придется заниматься поиском и удалением лишних записей…
Читаю сейчас Контроль доступа на основе ролей
наверное надо как-то роли прикручивать … к стандартной guest добавить еше одну для "недорегистрированных" но залогиненных…