現在ecサイト作っています。そこでユーザーのログインやパスワードの再設定のところで詰まってしまったので質問させていただきます。
ログイン機能ですが、deviseは使っていません。
ログインやログアウトはできたのでパスワード忘れてしまった時の設定もしなくてはと思い現在設定してるのですが、初心者なのでよくわからない箇所が出てきました。
http://masa-world.hateblo.jp/entry/2017/09/04/140618
↑のサイトを参考に設定したのですが、再設定ようのメールを送信した際にエラーが出てしまいます。
NoMethodError (undefined method `new_token' for #<Class:0xb4d78980>): app/models/user.rb:16:in `create_reset_digest' app/controllers/password_resets_controller.rb:17:in `create'
該当のuser.rbです
class User < ApplicationRecord # attr_accessible :name, :password_digest attr_accessor :remember_token, :activation_token, :reset_token # validates :password_digest,presence: true validates :password_digest, presence: true, length: { minimum: 4 }, allow_nil: true validates :email,presence: true validates :name, presence: true, uniqueness: true has_secure_password after_destroy :ensure_an_admin_remains has_many :favorites, dependent: :destroy # has_one :cart def create_reset_digest self.reset_token = User.new_token update_attribute(:reset_digest, User.digest(reset_token)) update_attribute(:reset_sent_at, Time.zone.now) end private def send_password_reset_email UserMailer.password_reset(self).deliver_now end # パスワード再設定の期限が切れている場合はtrueを返す def password_reset_expired? reset_sent_at < 2.hours.ago end end
エラーに書いてあるように、new_tokenっていうのを定義しないといけないんだと思うんですが、どう定義したらいいかわかりません。
調べてみたのですが、User.new_tokenの書いてある記事があってので同じくuser.rbに書き足しました
def User.new_token SecureRandom_urlsafe_base64 end
すると今度は、
NameError (uninitialized constant User::SecureRandom_urlsafe_base64): app/models/user.rb:22:in `new_token' app/models/user.rb:16:in `create_reset_digest' app/controllers/password_resets_controller.rb:17:in `create'
と案の定違うエラーが出てきました。ちなみに上の参考サイトは(https://qiita.com/yokoyan/items/fe7a74a09181b1840f9a)です。
ここでどうにもできなくなったので質問に至った感じです。
基本的に最初に載せた参考サイト(http://masa-world.hateblo.jp/entry/2017/09/04/140618)
に沿って書いてあります。おそらくここのnew_tokenを解決してもまた何かしらのエラーが出てきてしまうような気がしますが、何かご教授宜しくお願い致しますm(._.)m
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。