Rails4でwebサービスを作成しております。
今回の仕様上、emailとパスワードで認証せず、システム側で生成したユニークなID(8桁)とパスワードで認証するといった機能を実装したいです。
また、Userの種類も複数あり、それぞれが保持するカラムの情報も違うため、ポリモーフィックで実装しようと思っております。
HogeUser => メール認証(emailとpassword)(HogeUserがPiyoUserのIDを発行する) PiyoUser => ID認証(idとpassword) HugaUser => ID認証(idとpassword)
こういった仕様の中、現状ではsorceryで認証周りの実装をしようとおもっていたのですが、
今回のID認証というのを実現するための方法がわかりませんでした。
sorceryが提供するloginというメソッドにemailとpasswordのパラメータを渡して認証できるのですが、
今回はこのemailがシステム側で発行した8桁のidになります。
login(params[:email], params[:password])
こういったことはsorceryで実現できるのでしょうか?
また、sorceryでなければいけないわけではありませんので、authlogickなども含めて、現在調べているのですが、
解決に至らず、より良い方法がありましたらご提案頂けますと幸いです。
但し、可能でしたらdeviceは避けたいと思っております。
(認証周りが複雑なため、どこかしらで嵌りそうなため。)
宜しくお願いします。
追記
少なくともdeviceでしたら authentication_keys
というのが用意されており、こちらで、hoge_id(8桁のidを保持するカラム)を指定してあげれば実現できそうですが、前述の通り、deviceは最終手段としたいです。
sorceryではconfig/initializers/sorcery.rbのemailを変更すれば実装できましたが、
今回の用にHogeUserはemail認証で、PiyoUesrはhoge_idで認証するといったことができなさそうです。
user.username_attribute_names = [:email]
やりたいこととしましては、動的にusername_attribute_namesを入れ替えたいです。
この件を解決すべく、引き続き調べております。
あなたの回答
tips
プレビュー