0

次のようなカスタム ユーザーがいます。

class PersonsController < UsersController

end

ただし、問題なくサインインした後、「persons/edit」をクリックすると、ログインページにリダイレクトされます...ログで次のことを確認できます。

Person::RegistrationsController#edit as HTMLで処理完了 401 Unauthorized in 0ms

その後、再びログイン ページにリダイレクトされます。この時点でセッションは失われませんでした。プロファイルをクリックしてアカウントの詳細を確認できました。

なぜDeviseの編集アクションに問題があるのか​​ わかりません

また、登録コントローラーに次の構造があります

class Person
     class RegistrationsController < Devise::RegistrationsController
     end
end

どんな助けでも、それはありがたいです。ありがとう。

4

2 に答える 2

0

カスタムデバイスの最終的な目標は明確ではありませんが、現在のユーザーの情報を編集しようとしている場合は、このリンクを確認することをお勧めします. Devise - ハウツー:-ユーザーにパスワードの編集を許可する

この例ではユーザー パスワードを編集しますが、さらにフィールドが必要な場合は、問題なく追加できます。ただし、Users モデルを使用する別のコントローラーが必要です。

于 2012-07-11T00:51:33.723 に答える
0

実際に解決策を見つけました。カスタム Person::RegistrationsController でこのメソッドを再定義する必要がありました

def authenticate_scope!
  send(:"authenticate_user!", :force => true)
  self.resource = send(:"current_user")
end

セッションにはカスタムの「current_person」メソッドがないようですが、「users/sign_in」でログインしているため、常に current_user です (システム内の他のカスタムユーザーに共通のログインポイントが必要でした)。「persons/sign_in」でログインする場合、この回避策は必要ありません。何らかの理由で。理由はよくわかりませんが、これはdeviseのgithubリポジトリからの元の方法でした:

def authenticate_scope!
  send(:"authenticate_#{resource_name}!", :force => true)
  self.resource = send(:"current_#{resource_name}")
end

これが将来誰かに役立つことを願っています。

于 2012-07-11T13:20:34.110 に答える