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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

Q&A

解決済

1回答

1719閲覧

railsチュートリアル12章の有効期限について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

0グッド

0クリップ

投稿2019/06/03 08:22

railsチュートリアルの教材通りにパスワードリセットURLの有効期限を2時間に設定しましたが、リンクにアクセスしてもパスワードの有効期限切れてリセットできないようになっています。
原因が分かる方いましたらご教示ください。
宜しくお願い致します。

rails

1class PasswordResetsController < ApplicationController 2 before_action :get_user, only:[:edit, :update] 3 before_action :valid_user, only:[:edit, :update] 4 #before_action :check_expiration, only:[:edit, :update] 5 6 def new 7 end 8 9 def create 10 @user = User.find_by(email: params[:password_reset][:email].downcase) 11 if @user 12 @user.create_reset_digest 13 @user.send_password_reset_email 14 flash[:info] = "メールを送信しましたので確認してください。" 15 redirect_to root_path 16 else 17 flash.now[:danger] = "メールアドレスが見つかりません" 18 render 'new' 19 end 20 end 21 22 def edit 23 24 end 25 26 def update 27 if params[:user][:password].empty? 28 @user.errors.add(:password, :blank) 29 render 'edit' 30 elsif @user.update_attributes(user_params) 31 log_in @user 32 flash[:success] = "パスワード再設定メールをお送りしてありますので、メールボックスを確認してください" 33 redirect_to @user 34 else 35 render 'edit' 36 end 37 end 38 39 private 40 41 def user_params 42 params.require(:user).permit(:password, :password_confirmation) 43 end 44 45 def get_user 46 @user = User.find_by(email: params[:email]) 47 end 48 49 def valid_user 50 unless (@user && @user.activated? && @user.authenticated?(:reset, params[:id])) 51 redirect_to root_path 52 end 53 end 54 55 def check_expiration 56 if @user.password_reset_expired? 57 flash[:danger] = "パスワード再設定の有効期限切れです。" 58 redirect_to new_password_reset_url 59 end 60 end 61end 62

rails

1class User < ApplicationRecord 2 attr_accessor :remember_token, :activation_token, :reset_token 3 before_save :downcase_email 4 before_create :create_activation_digest 5 validates :name, presence: true, length:{maximum: 50} 6 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 7 validates :email, presence: true, length:{maximum: 255},format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false} 8 has_secure_password 9 validates :password, presence: true, length:{minimum: 8},allow_nil: true 10 validates :co_name, presence: true 11 12 def User.digest(string) 13 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost 14 BCrypt::Password.create(string, cost: cost) 15 end 16 17 def User.new_token 18 SecureRandom.urlsafe_base64 #ランダムなトークンを返す 19 end 20 21 def remember 22 self.remember_token = User.new_token 23 update_attribute(:remember_digest, User.digest(remember_token)) 24 end 25 26 def forget 27 self.update_attribute(:remember_digest, nil) 28 end 29 30 #渡されたトークンがダイジェストと一致したらtrueを返す 31 def authenticated?(attribute, token) 32 digest = send("#{attribute}_digest") 33 return false if digest.nil? 34 BCrypt::Password.new(digest).is_password?(token) 35 end 36 37 def activate 38 update_attribute(:activated, true) 39 update_attribute(:activated_at, Time.zone.now) 40 end 41 42 def send_activation_email 43 UserMailer.account_activation(self).deliver_now 44 end 45 46 def create_reset_digest 47 self.reset_token = User.new_token 48 update_attribute(:reset_digest, User.digest(reset_token)) 49 update_attribute(:reset_sent_at, Time.zone.now) 50 end 51 52 def send_password_reset_email 53 UserMailer.password_reset(self).deliver_now 54 end 55 56 def password_reset_expired? 57 reset_sent_at < 2.hours.ago 58 end 59 60 private 61 62 def downcase_email 63 self.email = email.downcase 64 end 65 66 def create_activation_digest 67 self.activation_token = User.new_token 68 self.activation_digest = User.digest(self.activation_token) 69 end 70end 71

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

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

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

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

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

guest

回答1

0

ベストアンサー

PasswordResetsController にて

#before_action :check_expiration, only:[:edit, :update]

がコメントアウトされているように見えますが、どうでしょう..????

こちらのコードだけでは、パット見どの部分で問題が発生しているのか
把握しづらい為、エラーなどが表示されてましたら、エラーメッセージの表示も
お願いできますでしょうか????

その後、双方に理解を行い、解決に近づければ幸いです。

投稿2019/06/04 10:22

fshun

総合スコア261

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問