3

通常のdevise gemに関するこの質問と同様に、 devise_token_auth gem を使用しても同じ結果が表示されます - json 応答に検証エラーが 2 回表示されます!?

ログから:

Processing by DeviseTokenAuth::RegistrationsController#create as JSON
  Parameters: {"name"=>"Mickey Mouse", "email"=>"mickeymouse@gmail.com", "password"=>"[FILTERED]", "confirmPassword"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4200/register", "registration"=>{"name"=>"Mickey Mouse", "email"=>"mickeymouse@gmail.com", "password"=>"[FILTERED]", "confirmPassword"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4200/register"}}
Unpermitted parameters: :confirmPassword, :confirm_success_url, :registration
Unpermitted parameters: :confirmPassword, :confirm_success_url, :registration
   (0.2ms)  BEGIN
  User Exists (0.9ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2  [["email", "mickeymouse@gmail.com"], ["LIMIT", 1]]
   (0.8ms)  SELECT COUNT(*) FROM "users" WHERE "users"."provider" = $1 AND "users"."email" = $2  [["provider", "email"], ["email", "mickeymouse@gmail.com"]]
   (0.3ms)  ROLLBACK
Completed 422 Unprocessable Entity in 247ms (Views: 0.7ms | ActiveRecord: 6.9ms)

unpermitted_pa​​rameters 行が 2 回表示されていることに注意してください。これは何かがおかしいことを示しているようです (これらの行は Postman では表示されません)。

私のユーザーモデルには標準ガイドから余分なものは何もないので、モデルには2つの一意性または存在の検証がありません.gemのソースコードを調べると、それもないようです.

モデルは次のとおりです。

class User < ActiveRecord::Base

  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable,
          :confirmable, :omniauthable
  include DeviseTokenAuth::Concerns::User
end

Postman からこのエンドポイントを呼び出すと、同じ結果が得られます。返される json は次のとおりです。

{
    "status": "error",
    "data": {
        "id": null,
        "account_id": null,
        "provider": "email",
        "uid": "",
        "name": null,
        "nickname": null,
        "image": null,
        "email": "mickeymouse@gmail.com",
        "created_at": null,
        "updated_at": null
    },
    "errors": {
        "email": [
            "has already been taken",
            "has already been taken"
        ],
        "full_messages": [
            "Email has already been taken",
            "Email has already been taken"
        ]
    }
}

Rails API はangular2-tokenライブラリを使用して Angular2 から呼び出されますが、それは明らかに問題ではありません (Postman からの結果を示してください)。

この原因を見つけるにはどうすればよいですか、または宝石にモンキーパッチを適用して2番目のエラーを削除するにはどうすればよいですか?

アップデート

モデルから削除:validatableして独自の検証を行う場合:

  validates_uniqueness_of :email

同じ結果が得られますが、これは奇妙です。

4

1 に答える 1