我正在使用设计来帮助我进行身份验证,并且由于各种原因,我有一些User模型的子类,它有助于分离注册和其他一些业务逻辑的问题。
User
的子类是Affiliate
和Admin
(我将来可能还有更多),所有这些都存储了User表中的所有数据(不是单独的表) )。
所有用户都可以通过默认的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
没有返回当前用户(又名:Affiliate
)?为什么current_affiliate
和affiliate_signed_in?
助手可以正常工作,而user
对不起呢?
有没有办法让框架始终使用current_user
和user_signed_in?
助手,因为所有内容都是User
模型的子类?
答案 0 :(得分:0)
您的设置方式似乎可以同时以用户和联属会员身份登录。这意味着,在给定时刻可能有current_user和current_affiliate。如果您希望它始终是current_user,则可以覆盖Devise帮助程序。但是你必须通过一个会话确保只有用户或联盟会员登录。 Else Devise无法知道要为current_user返回哪个对象。