質問: Rails4でsorcerryを用いた認証機能を実装しております。 今回の仕様上、emailとパスワードで認証せず、システム側で生成したユニークなID(8桁)も含めて、認証するといった機能を実装しなくてはいけません。 `username_attribute_names` を用いると、OR検索で、指定したカラム(以下のケースだと、username と email)で認証してくれますが、 今回やりたいことは、両方とも入力し、両方とも正しくないと認証しないという例です。(AND検索) こういったことはsorceryで実現できるのでしょうか? 少なくともdeviceでしたら `authentication_keys` というのが用意されており、こちらで実現できそうなのですが、 今回の要件上、sorceryが必須となっております。 宜しくお願いします。
回答: (メールアドレス, 8桁のID, パスワード)の三つの要素で認証する、ということですよね。 Sorceryでは(ID, パスワード)の二つの要素で認証する思想になっていると思います。 以下の部分で、ID(コード上は`credentials[0]`です)をキーにして、認証に用いるレコードを取り出しています。 Sorceryで何とかする場合は、~~`Sorcery::Model::Config#before_authenticate`で認証処理前に(メールアドレス,8桁のID)の組み合わせが存在するかをチェックする、という方法が考えられます。~~ ~~`before_authenticate`を使っている例は以下にあります。 これは、Brute force protection サブモジュールのコードです。~~ 認証処理前に(メールアドレス,8桁のID)の組み合わせが存在するかをチェックする、ということになると思います。