Sorceryで認証機能を作る際、各機能を追加するには都度サブモジュールをインストールしていくのですが、公式のチュートリアル通り進めようとして出だしでつまづいたので解決方法を記します。
##問題に当たるまで
User Activation機能を追加する場面を例に使います。
*ここではgemのインストールやUserモデルの作成、基本的な認証機能は実装済みであることを前提に進めます。
まずはサブモジュールのインストール
$ rails g sorcery:install user_activation --only-submodules
すると以下のマイグレーションファイルが作られます。
class SorceryUserActivation < ActiveRecord::Migration
def change
add_column :users, :activation_state, :string, :default => nil
add_column :users, :activation_token, :string, :default => nil
add_column :users, :activation_token_expires_at, :datetime, :default => nil
add_index :users, :activation_token
end
end
そしてマイグレート
$ rails db:migrate
ここでエラー発生!
rails aborted!
ArgumentError: To use user_activation submodule, you must define a mailer (config.user_activation_mailer = YourMailerClass).
エラーメッセージは「このサブモジュールを使うならメーラーを書いとけ!」 と言っていますが、従ったところで別のエラーが発生し先には進めません。
##原因
この問題は、最初にサブモジュール追加のコマンドを打った際、あとで自分で追記するべき箇所に自動的に追記されることで発生します。
Rails.application.config.sorcery.submodules = [:user_activation, :他のサブモジュール ...]
チュートリアルの通りに進めると、あとで上の:user_activation
を追記せよとの指示がありますが、今これが記載されていると先に進めなくなるので一旦削除します。
Rails.application.config.sorcery.submodules = [(:他のサブモジュール )...]
やっとマイグレートできるようになりました。
$ rails db:migrate
あとはチュートリアル通り進めると:user_activation
を追記する指示があるのでそこで追記し解決です。