0

我正在使用设计来帮助进行身份验证,出于各种原因,我有几个 User 模型的子类,它们有助于分离注册和其他一些业务逻辑的关注点。

Userare Affiliateand的子类Admin(将来我可能会有更多),所有这些子类都将所有数据存储在 User 表中(不是单独的表)。

所有用户都可以通过默认users资源 ( /users/sign_in) 登录。但是,这是我遇到问题的地方。

如果用户通过/users/sign_in资源登录,我可以访问user_signed_in?and current_userhelper,然后访问任何其他 Active Record 关联。这就是我要的!呜呼!这很好用。

但是,对于注册为Affiliate. 由于设计会自动登录用户(我确实想要),我希望它user_signed_in?等于true并且current_user是刚刚登录的用户。当用户通过/affiliate/sign_up资源注册时,情况并非如此。

Affiliate模型上(请记住,它像这样子类化用户class Affiliate < User)我已经(通过设计)为 sign_up 生成了一组单独的控制器/视图,因此我可以稍微自定义这个过程(因为 sign_up 过程对于这个特定类型更加自定义)用户)。当用户通过此资源/affiliate/sign_up注册会员时,然后注册,但现在,current_userniluser_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为什么不返回当前用户(又名:the )?为什么and助手可以工作,而-esque 则不行?user_signed_in?current_userAffiliatecurrent_affiliateaffiliate_signed_in?user

有没有办法让框架总是使用current_useruser_signed_in?帮助,因为一切都是User模型的子类?

4

1 回答 1

0

根据您的设置方式,您似乎可以同时以用户和会员身份登录。这意味着,在给定的时刻可能有一个 current_user 和一个 current_affiliate。如果你希望它一直是 current_user,你可以覆盖 Devise 助手。但是您必须确保只有一个用户或会员通过一个会话登录。Else Devise 无法知道为 current_user 返回哪个对象。

于 2012-04-04T18:45:11.223 回答