авторизация: два разных Identity

Подскажите как лучше сделать. На сайт есть два разных входа.

Стандартный:

  • регистрация (таблица 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 добавить еше одну для "недорегистрированных" но залогиненных…

я в том направлении копаю ?

Для всех OpenAuth юзеров свои таблицы, в главной таблице Users поля с ID и признаком соц.сети VK,FB… etc… Дальше крути как хочешь.

ps: работа с авторизацией и с выбором пользователей только из Users…