2012-04-04 2 views
0

Я использую программу, чтобы помочь с моей аутентификацией, и по разным причинам у меня есть пара подклассов модели User, которая помогает разделить проблемы для регистрации и некоторых других бизнес-логик.Настраивать наследование пользователя и user_signed_in? и current_user

Подклассы User являются Affiliate и Admin (и я мог бы иметь больше в будущем), все из которых хранить все данные в таблице пользователей (не отдельные таблицы).

Все пользователи могут подключиться к сети через заданный по умолчанию ресурс users (/users/sign_in). Однако у меня проблема.

Если пользователь регистрируется через ресурс /users/sign_in, я могу получить доступ к помощнику user_signed_in? и current_user, а затем получить доступ к любым другим ассоциациям Active Record. Это то, что я хочу! Уо! Это отлично работает.

Однако, это не относится к пользователю, который подписывается как Affiliate. Поскольку программа автоматически регистрирует пользователя (в котором я хочу), я ожидаю, что user_signed_in? будет равен true и current_user, который будет только что подписанным пользователем. Это не тот случай, когда пользователь подписывается через ресурс /affiliate/sign_up.

На Affiliate модели (помните, что подклассы пользователя, как такой class Affiliate < User) Я вызвал (через завещанию) отдельный набор контроллера/представления для sign_up, чтобы я мог настроить этот процесс немного (как процесс sign_up немного более настраиваемый для данного конкретного пользователя). Когда пользователь подписывается через этот ресурс /affiliate/sign_up, тогда зарегистрирован филиал, но СЕЙЧАС current_user - nil и user_signed_in? - false. Но помощники current_affiliate - это гидратированный объект, а affiliate_signed_in? - это правда.

То, что я хочу сделать, это быть в состоянии получить доступ к одному типу помощника - в user_signed_in? помощника и помощника current_user не ребенка affiliate_signed_in? и current_affiliate. Я хотел бы получить доступ: current_user и user_signed_in. Увидев, что Affiliate подклассы User, почему не user_signed_in? и current_user вернули текущего пользователя (aka: Affiliate)? Почему помощники current_affiliate и affiliate_signed_in? работают, но не user -некоторые не такие?

Есть ли способ сделать рамки всегда использовать current_user и user_signed_in? помощники, поскольку все подклассифицирует модель User?

ответ

0

Как вы его настраиваете, кажется, что вы можете одновременно войти в систему как пользователь, так и партнер. Это означает, что в данный момент может существовать current_user и current_affiliate. Если вы хотите, чтобы он был current_user все время, вы можете переопределить помощники Devise. Но вы должны убедиться, что в течение одного сеанса может быть только пользователь или партнер. У Else Devise нет способа узнать, какой объект будет возвращен для current_user.

Смежные вопросы