私はDevise gemの問題を解決しようとしています。問題は、devise_token_authで標準deviseを使用しているときです。クラスコンテキストは同じ名前のモジュールメソッドをオーバーライドしますか?
application_controller.rbで、devise_token_authは、モジュールを追加する必要があります:
class ApplicationController < ActionController::Base
include DeviseTokenAuth::Concerns::SetUserByToken
このSetUserBytTokenモジュールを追加した後、私はブラウザ(ない/ API/V1 /認証/内のユーザ/ sign_inパスを読み込みますサインイン)。 users/sign_inパスは、devise_token_authではなく、deviseをロードする必要があります。
def resource_class(m=nil)
:次のようになり、同じファイル内のメソッドがあり
def set_user_by_token(mapping=nil)
# determine target authentication class
rc = resource_class(mapping)
:
wrong number of arguments (given 1, expected 0) def resource_class
devise_token_auth
はset_user_by_token.rbでこれを呼び出す:
はしかし、私はエラーを取得します
このメソッドは、DEFAULT引き数を受け入れます。しかし、あなたはエラーを見ました。
wrong number of arguments (given 1, expected 0)
この方法はいくつかの方法を上書きする必要があります。これをチェックアウト:
http://www.rubydoc.info/github/plataformatec/devise/DeviseController%3Aresource_class
考案は、オプションの引数を取りません同じ名前のメソッドを持っています。私はそのメソッドがSetUserByTokenモジュールで定義されているメソッドをオーバーライドする方法を理解していません。 SetUserByTokenのメソッドを呼び出すので、モジュールで定義されたものをルビーで見るべきではありません。 https://github.com/lynndylanhurley/devise_token_auth/blob/master/app/controllers/devise_token_auth/concerns/set_user_by_token.rb
あなたの継承階層は私には不明です。しかし、あなたの質問のタイトルに行く: "クラスコンテキストは、同じ名前を持つモジュールメソッドをオーバーライドしますか?"はい、それはどのように動作します。 'クラスC; M endを含むと 'M 'は' C 'のスーパークラスになります。それだけです。 'M'は' C'のスーパークラス(または 'C'は' M'のサブクラスです)であるので、 'C'で定義されたメソッドは' M'で定義されたメソッドをオーバーライドします。働く'M'メソッドが' C'をオーバーライドするようにするには 'prepend'を使う必要があります。これは' M'を 'ancestors'リストの* front *に入れます。 –
はい、私の質問に答えました。それにもかかわらず、私はsimple_token_authentication gem isnteadに移動しました。これは維持されず、上記のものより多くの問題があります。 – Donato
そこに重複した質問があることは確かですが、現時点でそれを見つけることはできません。たぶん、より良い検索スキルを持つ他の人が質問を閉じることができます。それまでの間、私はすぐに答えを出すつもりです。 –