shuhei-T / reptiles_log

爬虫類飼育者のためのかんたん飼育記録サービス「レプログ!」
https://reptileslog.com/
8 stars 1 forks source link

sorceryリセットパスワード機能実装でのエラー #135

Closed shuhei-T closed 2 years ago

shuhei-T commented 2 years ago

質問内容・実現したいこと

sorceryのリセットパスワード機能を実装したく公式GitHub、基礎編のカリキュラムを参考にしましたが、詰まってしまいました。 最初からリセットパスワード機能を導入するコマンドでエラーを吐き、マイグレーションファイルが生成されませんでした。 ググってみても参考になるような文献が見つからず、試しに手動で作成されるマイグレーションファイルと同様のものを作成し、migrateして勧めましたが、うまくいきませんでした。 どのように対処したらよいかご相談させてください。

現状発生している問題・エラーメッセージ

最初のコマンドのエラー

> rails g sorcery:install resert_password --only-submodules                                                  +reset_password_#75
Running via Spring preloader in process 37878
        gsub  config/initializers/sorcery.rb
File unchanged! The supplied flag value not found!  app/models/user.rb
Could not find "migration/resert_password.rb" in any of your source paths. Your current source paths are:
/Users/takahashishuuhei/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/sorcery-0.16.2/lib/generators/sorcery/templates

エラーから考えられる原因

受講生に相談したところ、rails6.1.4系だと、同様にマイグレーションファイルが生成されないなどの現象になった人もいるようです。 railsとsorceryのバージョンの相性があるのかもしれません。

試したこと

規定のコマンドで上手く行かないため、試しに手動でマイグレーションファイルを作成しました。

> rails g migration SorceryResetPassword                                                                     +reset_password_#75
Running via Spring preloader in process 38373
      invoke  active_record
      create    db/migrate/20220328152254_sorcery_reset_password.rb
class SorceryResetPassword < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :reset_password_token, :string, default: nil
    add_column :users, :reset_password_token_expires_at, :datetime, default: nil
    add_column :users, :reset_password_email_sent_at, :datetime, default: nil
    add_column :users, :access_count_to_reset_password_page, :integer, default: 0

    add_index :users, :reset_password_token
  end
end

あとはカリキュラム通りに進めましたが、Letter_openerで確認しようとしたところ、下記のようなエラーになり、そもそも規定のコマンドで進めていないので、これ以上深入りは得策では無いと思ったので、一度相談させて頂きました。 変更を加えたブランチはコミットしてません。

NoMethodError - undefined method `reset_password_mailer=' for #<Sorcery::Model::Config:0x0000000110105c78 @defaults={:@submodules=>[], :@username_attribute_names=>[:email], :@password_attribute_name=>:password, :@downcase_username_before_authenticating=>false, :@email_attribute_name=>:email, :@crypted_password_attribute_name=>:crypted_password, :@encryption_algorithm=>:bcrypt, :@encryption_provider=>Sorcery::CryptoProviders::BCrypt, :@custom_encryption_provider=>nil, :@encryption_key=>nil, :@pepper=>"", :@salt_join_token=>"", :@salt_attribute_name=>:salt, :@stretches=>nil, :@subclasses_inherit_config=>false, :@before_authenticate=>[], :@after_config=>[], :@email_delivery_method=>:deliver_now, :@token_randomness=>15}, @submodules=[:resert_password], @username_attribute_names=[:email], @password_attribute_name=:password, @downcase_username_before_authenticating=false, @email_attribute_name=:email, @crypted_password_attribute_name=:crypted_password, @encryption_algorithm=:bcrypt, @encryption_provider=Sorcery::CryptoProviders::BCrypt, @custom_encryption_provider=nil, @encryption_key=nil, @pepper="", @salt_join_token="", @salt_attribute_name=:salt, @stretches=nil, @subclasses_inherit_config=false, @before_authenticate=[], @after_config=[], @email_delivery_method=:deliver_now, @token_randomness=15>:
  config/initializers/sorcery.rb:405:in `block (2 levels) in <main>'
  app/models/user.rb:2:in `<class:User>'
  app/models/user.rb:1:in `<main>'
  app/controllers/application_controller.rb:12:in `set_search'

参考にしたURL

https://github.com/Sorcery/sorcery https://osamudaira.com/247/

takyyk commented 2 years ago

config/initializers/sorcery.rbにどのような変更を加えられているのかは確認したいです!

Rails.application.config.sorcery.submodules = [:reset_password]の設定は加えられていますか?

shuhei-T commented 2 years ago

@takyyk コメントありがとうございます! rails g sorcery:install resert_password --only-submodulesを叩くことで、

Rails.application.config.sorcery.submodules = [:resert_password]

の設定が加えられます。

shuhei-T commented 2 years ago

タイポが原因でした。

rails g sorcery:install resert_password --only-submodules

こちらのisuueは一旦閉じさせてもらいます。