質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

1538閲覧

パスワード再設定の書方

takeke

総合スコア60

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/04/17 12:55

編集2018/04/17 12:57

現在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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

参考にされている記事の一部だけが間違っているようです。

SecureRandom_urlsafe_base64

ではなく

SecureRandom.urlsafe_base64

です(一つ目が_ではなく.)。記事でも後半のコードでは修正されています。

なお、SecureRandomは組込クラスではないため、どこかで読み込んでいなければ、コードの最初の方にrequire 'securerandom'が必要になる場合があります。

投稿2018/04/17 22:11

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問