

Rails４でsorcerryを用いた認証機能を実装しております。

今回の仕様上、emailとパスワードで認証せず、システム側で生成したユニークなID（8桁）も含めて、認証するといった機能を実装しなくてはいけません。

`username_attribute_names` を用いると、OR検索で、指定したカラム（以下のケースだと、username と
email）で認証してくれますが、  
今回やりたいことは、両方とも入力し、両方とも正しくないと認証しないという例です。（AND検索）  
<http://dev.classmethod.jp/server-side/ruby-on-rails/ruby-on-
rails_sorcery_auth_no2/>

こういったことはsorceryで実現できるのでしょうか？

少なくともdeviceでしたら `authentication_keys` というのが用意されており、こちらで実現できそうなのですが、  
今回の要件上、sorceryが必須となっております。

宜しくお願いします。


CC BY-SA 3.0
2017-02-08T01:30:03.467
32478
2021-04-16T05:28:37.793
2018-07-07T08:24:01.713
754
13175
question
ruby-on-rails sorcery
sorceryでemailだけではなく、もう一つ項目を追加してpassword含め3つのパラメータで認証する機能を実装したいです。


(メールアドレス, 8桁のID, パスワード)の三つの要素で認証する、ということですよね。

Sorceryでは(ID, パスワード)の二つの要素で認証する思想になっていると思います。  
以下の部分で、ID（コード上は`credentials[0]`です)をキーにして、認証に用いるレコードを取り出しています。  
<https://github.com/Sorcery/sorcery/blob/4e3fcdb8df16912424281322ce9f2862937846fc/lib/sorcery/adapters/active_record_adapter.rb#L61>

Sorceryで何とかする場合は、
~~`Sorcery::Model::Config#before_authenticate`で認証処理前に(メールアドレス,8桁のID)の組み合わせが存在するかをチェックする、という方法が考えられます。

`before_authenticate`を使っている例は以下にあります。  
<https://github.com/Sorcery/sorcery/blob/4e3fcdb8df16912424281322ce9f2862937846fc/lib/sorcery/model/submodules/brute_force_protection.rb#L114>  
これは、Brute force protection サブモジュールのコードです。~~

認証処理前に(メールアドレス,8桁のID)の組み合わせが存在するかをチェックする、ということになると思います。


CC BY-SA 3.0
2017-02-18T15:42:05.920
32779
2017-02-18T17:00:30.810
2017-02-18T17:00:30.810
32478
answer