0

認証を支援するためにdeviseを使用していますが、さまざまな理由から、登録に関する懸念と他のビジネスロジックを分離するのに役立つ User モデルのサブクラスがいくつかあります。

andのサブクラスはUser(将来的にはさらに増える可能性があります)、すべてのデータを User テーブル (別個のテーブルではありません) に格納します。AffiliateAdmin

すべてのユーザーは、デフォルトusersリソース ( /users/sign_in) 経由でログインできます。しかし、これは私が問題を抱えているところです。

/users/sign_inユーザーがリソース経由でサインインするuser_signed_in?と、current_userヘルパーにアクセスして、他の Active Record 関連付けにアクセスできます。これは私が欲しいものです!ウーフー!これはうまくいきます。

ただし、 としてサインアップするユーザーには、同じことは当てはまりませんAffiliate。devise は自動的にユーザーをログインさせるので (私はこれを望んでいます)、サインインしたばかりのユーザーと同じになることを期待してuser_signed_in?trueます。これは、ユーザーがリソースcurrent_user経由でサインアップする場合には当てはまりません。/affiliate/sign_up

Affiliateモデルでは( user like such をサブクラス化することを思い出しclass Affiliate < Userてください)、sign_up 用にコントローラー/ビューの別のセットを (devise を通じて) 生成したので、このプロセスを少しカスタマイズできます (sign_up プロセスはこの特定のタイプに対してもう少しカスタマイズされているため)。ユーザーの)。ユーザーがこのリソースを介してサインアップする/affiliate/sign_upと、アフィリエイトがサインアップされますがcurrent_usernil現在user_signed_in?false. しかし、ヘルパーcurrent_affiliateは水和オブジェクトであり、affiliate_signed_in?真実です。

私がやりたいのは、ヘルパーの1つのタイプにアクセスできるようにすることです-user_signed_in?ヘルパーとcurrent_user、子ではなくヘルパーaffiliate_signed_in?current_affiliate. アクセスしたい: current_userand user_signed_inonly. Affiliateそのサブクラスを見て、現在のユーザー (別名: )を返さUserないのはなぜですか? andヘルパーは機能するのに、 -esqueヘルパーは機能しないのはなぜですか?user_signed_in?current_userAffiliatecurrent_affiliateaffiliate_signed_in?user

すべてがモデルをサブクラス化しているため、フレームワークが常にヘルパーを使用するようにする方法はありcurrent_userますか?user_signed_in?User

4

1 に答える 1

0

この設定方法では、ユーザーとアフィリエイトの両方で同時にログインできるようです。つまり、特定の瞬間に current_user と current_affiliate が存在する可能性があります。常に current_user にしたい場合は、Devise ヘルパーをオーバーライドできます。ただし、1 つのセッションでログインできるのはユーザーまたはアフィリエイトのみであることを確認する必要があります。それ以外の場合、Devise は current_user に対してどのオブジェクトを返すかを知る方法がありません。

于 2012-04-04T18:45:11.223 に答える